Deshabilitar PHP en el directorio(incluidos todos los subdirectorios) con.htaccess
apache (8)
Estoy creando un sitio web que permite a las personas subir archivos, páginas html, etc. Ahora estoy teniendo un problema. Tengo una estructura de directorios como esta:
-/USERS
-/DEMO1
-/DEMO2
-/DEMO3
-/etc... (every user has his own direcory here)
-index.php
-control_panel.php
-.htaccess
Ahora quiero desactivar PHP, pero habilitar Server-side includes en las direcciones y subdirectorios dentro / USERS
¿Se puede hacer esto (y cómo :))? Gracias por adelantado.
Por cierto, uso el servidor WAMP
Esto mostrará el código fuente en lugar de ejecutarlo:
<VirtualHost *>
ServerName sourcecode.testserver.me
DocumentRoot /var/www/example
AddType text/plain php
</VirtualHost>
Lo utilicé una vez para permitir que otro compañero de trabajo tenga acceso de lectura al código fuente de la red local (solo una alternativa rápida y sucia).
ADVERTENCIA ! :
Como Dan lo señaló hace algún tiempo, este método nunca debería usarse en producción. Siga la respuesta aceptada, ya que bloquea cualquier intento de ejecutar o mostrar archivos php.
Si desea que los usuarios compartan archivos php (y permita que otros muestren el código fuente), existen mejores formas de hacerlo, como git, wiki, etc.
¡Este método debe ser evitado! (usted ha sido advertido. Lo dejó aquí con fines educativos)
Esto podría ser excesivo, pero tenga cuidado al hacer cualquier cosa que dependa de la extensión de los archivos PHP .php
, ¿qué .php4
si alguien viene más tarde y agrega controladores para .php4
o incluso .html
para que sean manejados por PHP. Tal vez sea mejor que saque archivos de esos directorios desde una instancia diferente de Apache o algo así, que solo sirve contenido estático.
Intente deshabilitar la opción de engine
en su archivo .htaccess:
php_flag engine off
Ninguna de esas respuestas funciona para mí (ya sea generando un error de 500 o no haciendo nada). Eso probablemente se deba al hecho de que estoy trabajando en un servidor alojado en el que no puedo tener acceso a la configuración de Apache.
Pero esto funcionó para mí:
RewriteRule ^.*/.php$ - [F,L]
Esta línea generará un error Prohibido 403 para cualquier URL que termine con .php
y termine en este subdirectorio.
@Oussama me lleva a la dirección correcta here , gracias a él.
Para deshabilitar todo el acceso a los subdirectores (el más seguro), use:
<Directory full-path-to/USERS>
Order Deny,Allow
Deny from All
</Directory>
Si desea bloquear solo los archivos PHP para que no se sirvan directamente, haga lo siguiente:
1 - Asegúrese de saber qué extensiones de archivos el servidor reconoce como PHP (y no permita que las personas sobrescriban en htaccess). Uno de mis servidores está configurado para:
# Example of existing recognized extenstions:
AddType application/x-httpd-php .php .phtml .php3
2: según las extensiones, agregue una Expresión regular a FilesMatch (o LocationMatch)
<Directory full-path-to/USERS>
<FilesMatch "(?i)/.(php|php3?|phtml)$">
Order Deny,Allow
Deny from All
</FilesMatch>
</Directory>
O use la ubicación para hacer coincidir los archivos php (prefiero el enfoque de los archivos anteriores)
<LocationMatch "/USERS/.*(?i)/.(php3?|phtml)$">
Order Deny,Allow
Deny from All
</LocationMatch>
Prueba esto:
<FilesMatch "/.((php[0-9]?)|p?html?|pl|sh|java|cpp|c|h|js|rc)$">
SetHandler None
</FilesMatch>
Si está utilizando mod_php, puede poner (en .htaccess en / USERS o en su httpd.conf para el directorio USERS)
RemoveHandler .php
o
RemoveType .php
(dependiendo de si PHP está habilitado usando AddHandler o AddType)
Los archivos PHP que se ejecutan desde otro directorio aún podrán incluir archivos en / USERS (suponiendo que no haya una restricción open_basedir), porque esto no pasa por Apache. Si se accede a un archivo php usando apache, se almacenará en servidor como texto sin formato.
Editar
La solución de Lance Rushing de simplemente negar el acceso a los archivos es probablemente mejor
<Directory /your/directorypath/>
php_admin_value engine Off
</Directory>