Publicado el Domingo 27 de Enero del 2008 @ 13:11 por Armonth.
Cosas que tiene la red, si hace un par de días comentaba cómo usar php5 como CGI con un php.ini personalizado en Dreamhost ahora AskApache comenta cómo proteger una instalación de éste tipo.
Y es que si tenemos una instalación en /cgi-bin/ la tenemos que dejar por un lado accesible para que los scripts puedan ejecutar PHP pero por el otro no es nada agradable que cualquiera pueda arrancar el php.cgi o leer el php.ini ¿verdad?.
AskApache propone varias soluciones, todas ellas basadas en impedir el acceso si la variable REDIRECT_STATUS no está activada. Una de ellas es mediante .htaccess y creo que es la más sencilla, consiste en crear un fichero .htaccess dentro de /cgi-bin/ con el siguiente contenido:
Order Deny,Allow
Deny from All
Allow from env=REDIRECT_STATUS
Otra solución pasa por hacer lo mismo pero sólo aplicable (mediante una expresión regular) a ficheros que coincidan con php[0-9].(ini|cgi), es decir, casos como php.ini, php1.cgi, php9.cgi, etcétera:
<FilesMatch "^php5?\.(ini|cgi)$">
Order Deny,Allow
Deny from All
Allow from env=REDIRECT_STATUS
</FilesMatch>
Por último otra solución pasa por permitir el acceso sólo cuando se haya enviado con un “STATUS 200″ (200 OK) lo cual hace que otras peticiones (por ejemplo 403 Forbidden o 404 Not Found) no puedan ejecutar PHP. Esta última opción sólo es recomendable si tenemos redirigidos todas las páginas de error a ficheros HTML personalizados mediante ErrorDocument.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^.*\.(php|cgi)$
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule .* - [F]