2 votes

Sécuriser PHP sur IIS 8.5

J'utilise IIS 8.5 sur Windows Server 2012 R2 pour héberger des applications ASP.NET et PHP. Comme il y a plusieurs applications PHP différentes, je veux restreindre l'accès en utilisant open_basedir. Le problème : avec le gestionnaire PHP d'IIS, il n'est pas possible d'utiliser un fichier php.ini différent pour chaque serveur virtuel. J'ai donc trouvé une solution personnalisée : Après que PHP Manager ait ajouté l'assignation du php-handler, j'ai modifié le fichier exécutable comme suit :

"C:\Program Files (x86)\PHP\v5.4.26\php-cgi.exe"|-c D:\Sites\my-domain.com

Cela fonctionne, le serveur virtuel utilise le fichier php.ini. D:\Sites\my -domaine.com \php.ini. Mais cette solution me semble un peu sale. Existe-t-il un meilleur moyen de paramétrer un seul fichier php.ini pour chaque serveur virtuel ?

0voto

Jan Reilink Points 111

+1 pour @ahmelsayed sa réponse. Mais vous pouvez créer plusieurs applications FastCGI dans IIS, avec différents fichiers php.ini facilement avec Appcmd. Mais seulement un handler/php.ini par pool d'application, voir :

Mettez en place deux applications FastCGI :

Appcmd.exe set config /section:system.webServer/fastCGI
/+"[fullPath='c:\php5\php-cgi.exe', arguments='-c c:\php5\php.site1.ini'], 
maxInstances='0', idleTimeout='300', activityTimeout='70', 
requestTimeout='90', instanceMaxRequests='9999', 
protocol='NamedPipe', flushNamedPipe='False']" /commit:apphost

Appcmd.exe set config /section:system.webServer/fastCGI
/+"[fullPath='c:\php5\php-cgi.exe', arguments='-c c:\php5\php.site2.ini', 
maxInstances='0', idleTimeout='300', activityTimeout='70', 
requestTimeout='90', instanceMaxRequests='9999', 
protocol='NamedPipe', flushNamedPipe='False']" /commit:apphost

Chaque site web peut alors avoir son propre gestionnaire pour .php, pointant vers l'un des fichiers php.ini :

AppCmd.exe set config "site1.com" /section:system.webServer/handlers 
  "-+[name=`'PHP`',
    path=`'*.php`',
    verb=`'*`',
    modules=`'FastCgiModule`',
    scriptProcessor=`'c:\php5\php-cgi.exe|-c c:\php5\php.site1.ini`',
    resourceType=`'File`',
    allowPathInfo=`'true`',
    requireAccess=`'Script`']"

AppCmd.exe set config "site2.com" /section:system.webServer/handlers 
  "-+[name=`'PHP`',
    path=`'*.php`',
    verb=`'*`',
    modules=`'FastCgiModule`',
    scriptProcessor=`'c:\php5\php-cgi.exe|-c c:\php5\php.site2.ini`',
    resourceType=`'File`',
    allowPathInfo=`'true`',
    requireAccess=`'Script`']"

Si vous n'aimez pas la ligne de commande, vous pouvez bien sûr cliquer sur IIS Manager :) BTW, en supposant que les identités du pool d'applications et les permissions de fichiers NTFS soient correctement configurées, je pense qu'il n'est pas nécessaire d'utiliser open_basedir.

Edit : Deux références : https://www.saotn.org/php-wincache-on-iis/ y https://www.saotn.org/custom-php-version-iis-express-webmatrix3/ pour montrer comment ajouter plusieurs applications FastCGI + PHP dans IIS.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X