Aplicaciones PHP seguras con suexec
Si la aplicación se ejecuta en Apache (como más de la mitad de los sitios web en Internet lo hacen), es posible que desee considerar que permite SuExec en la configuración de Apache. SuExec es un mecanismo que se incluye con Apache que causa scripts que deben ejecutarse como el usuario que posee la secuencia de comandos, en lugar de correr como el usuario del servidor web.
En un entorno no SuExec, todos los scripts se ejecutan como el mismo ID de usuario como el propio servidor web. Por desgracia, un script vulnerables puede dar a un usuario malintencionado el acceso por la puerta trasera a todo el servidor web, incluyendo secuencias de comandos que se ejecutan en otros sitios alojados en el mismo servidor.
SuExec intenta mitigar este problema mediante la restricción de aplicaciones web para sus propias áreas y funcionando bajo los ID de usuario de sus propietarios, y no bajo el ID de usuario del servidor web. Por ejemplo, este script correría bajo el ID de usuario jsmith:
/home/~jsmith/public_html/scripts/please_hack_me.php
Un usuario malintencionado podría aprovechar esta secuencia de comandos, pero él o ella tendría acceso sólo a los archivos y programas que el jsmith se permite al usuario utilizar. Cualquier otro usuario en el servidor estaría protegida jsmithEs por guión inseguro.
Desafortunadamente, conseguir SuExec funcione correctamente con hosts virtuales, o múltiples sitios web independientes ubicados físicamente en el mismo servidor web, puede ser complicado. SuExec está diseñado para ejecutar secuencias de comandos que existen en la raíz de documentos del servidor web.
La mayoría de las máquinas virtuales se configuran de una manera que da a cada página web individuo su propia raíz del documento, y la raíz de documentos de cada sitio no se encuentra en la raíz de documentos del servidor web. Para evitar esta restricción, el administrador del sistema debe agregar raíz de documentos de cada host virtual a la variable raíz de documentos del servidor web en el archivo de configuración de Apache.
SuExec también requiere que los scripts PHP se ejecutan como Common Gateway Interface (CGI), que es más lento que correr PHP como un módulo precompilado bajo Apache. CGI fue el primer modelo viable para aplicaciones web, y todavía se utiliza para las secuencias de comandos simples. Sin embargo, una vez que deje el reino de scripting PHP y empezar a escribir aplicaciones de pleno derecho, tendrá el aumento de rendimiento de PHP precompilado.
Para los servidores web bastante simples, SuExec puede mantener una aplicación insegura de pisotear todo lo demás. Sin embargo, en un entorno más complejo con servidores virtuales, módulos precompilados, y docenas o cientos de usuarios, se necesita un modelo de seguridad que es un poco más robusto.