Bloquear la ejecución de PHP en directorios con permisos de escritura
Cómo impedir la ejecución de PHP en los directorios vulnerables de tu sitio.
Una de las formas más habituales en que un sitio web queda comprometido son las shells PHP — scripts maliciosos que un atacante sube a tu servidor para modificar archivos, leer datos de configuración u obtener acceso directo a la base de datos.
La clave está en que las shells solo pueden subirse a directorios con permisos de escritura. Por eso, si una carpeta no necesita ejecutar PHP — y la mayoría de carpetas de subidas y de medios no lo necesitan — deberías deshabilitarlo explícitamente. Los candidatos habituales son directorios como /images/, /uploads/, /templates/ y cualquier otro donde aterrice contenido subido por los usuarios.
Método 1 — Servidores CGI, FastCGI, suPHP o DSO (Apache)
Crea un archivo .htaccess en el directorio donde quieras bloquear la ejecución de PHP. Si ya existe uno, añade el siguiente código al principio del archivo:
<FilesMatch "\.([Pp][Hh][Pp]|[Cc][Gg][Ii]|[Pp][Ll]|[Ph][Hh][Tt][Mm][Ll])\.?.*">
Order allow,deny
Deny from all
</FilesMatch>
Esto bloquea el acceso HTTP directo a cualquier archivo PHP (y CGI/Perl/PHTML) que se encuentre en ese directorio. Aunque se suba una shell, no podrá ejecutarse desde el navegador.
Nuestros servicios y productos
Método 2 — Servidores mod_PHP (DSO — Apache PHP)
Si tu servidor funciona en modo mod_PHP y permite las directivas php_flag y php_value en .htaccess, esta única línea es todo lo que necesitas:
php_flag engine off
Añádela a un archivo .htaccess en la carpeta que quieras proteger. Esto deshabilita completamente el intérprete PHP para ese directorio y todos sus subdirectorios. Cualquier archivo PHP subido a esa estructura queda inutilizado — el servidor simplemente se negará a ejecutarlo.
Ayuda
¿Tienes dudas o necesitas ayuda? Escríbenos a través del sistema de tickets — siempre estamos aquí para ayudarte!