Las aplicaciones PHP tienen reputación de tener problemas de seguridad superiores a la media. ¿Qué técnicas de configuración utiliza para asegurarse de que la aplicación sea lo más segura posible?
Estoy buscando ideas como:
- Usando PHP / Suhosin endurecido
- Usando mod_security
- Deshabilitar register_globals y allow_url_fopen en php.ini
Normalmente uso Linux, pero siéntase libre de sugerir soluciones de Windows también.
fuente
En mi experiencia, la mayoría de las vulnerabilidades en un sitio web basado en PHP son el resultado de un diseño pobre (del sitio), en lugar de fallas en el propio PHP.
Algunos consejos rápidos:
* También puede echar un vistazo a una breve publicación que escribí llamada "Asegurando phpinfo (), más o menos" y asegúrese de leer los comentarios http://egovsergo.com/2009/04/03/protecting-your-phpinfo/ Fue una idea rápida que tenía que proteger (algo) phpinfo () si de alguna manera olvidé eliminarlo en un sitio de producción.
De manera más general, algunos desarrolladores escriben contenedores para funciones confidenciales que verifican si el indicador "sitio de producción" no está configurado o no, y deshabilita la función sensible en producción.
fuente
Otros parámetros que deben modificarse para fortalecer el PHP:
Almacene todos los errores de PHP en el archivo /var/log/phperror.log :
fuente
He agregado los repositorios dotdeb a mi /etc/apt/sources.lst
Como parchan php / apache / mysql con mucha más frecuencia que Debian.
fuente
Considera configurar
open_basedir
"por sitio".open_basedir
es una configuración de php.ini que evitará que sus scripts accedan a archivos fuera de una lista blanca definida. Si su servidor aloja varios sitios, evitará que un sitio lea la configuración de la base de datos de otro sitio. También evitará que un script php acceda / modifique archivos centrales del sistema. Open basedir es fácil de configurar, simplemente agregue la línea "php_admin_value open_basedir /my/list/of/folders:/as/a/colon/seperated/list
" a cada servidor virtual Apache.También considere desactivar el motor de script PHP para todos los sitios / carpetas que no deberían contener scripts PHP (por ejemplo, una carpeta de imágenes cargadas). Nuevamente, esto es simple, agregue "motor php_admin_value apagado" a cualquier Apache VirtualHosts que no necesite php. Para deshabilitar PHP en un directorio, coloque lo mismo en una etiqueta de Directorio.
Ejecute permisos de archivo lo más estrictos posible, evite el acceso de escritura a los scripts PHP para el usuario de Apache, esto evita que un script en ejecución se modifique a sí mismo u otros scripts en el mismo sitio / servidor. Si es posible, evite los permisos 777, calcule los permisos mínimos necesarios para ejecutar la aplicación y utilícelos.
Si aloja varios sitios, cada uno con su propia base de datos, use un usuario separado de MySQL / Postgres para cada uno y establezca permisos para cada usuario de modo que solo tengan acceso a las bases de datos relevantes. Una vez más, esto evitará que un script falso altere la base de datos de otra aplicación.
Suosin, HardenedPHP, mod_security y similares también son valiosos, pero úsalos además de una configuración estrechamente bloqueada, no en lugar de.
fuente
Suhosin tiene un costo de rendimiento bastante sustancial, por lo que el comentario "no cuesta nada" está un poco fuera de lugar.
fuente
¿Está buscando algunas sugerencias básicas de firewall / topología? Me gusta la idea de usar cosas como libra para evitar el acceso directo al servidor web PHP desde las redes internas sin lavar. De esa manera, también puede segregar el servidor web de otras partes de su red.
fuente
Usar Suhosin / mod_security / SuPHP ciertamente hará que su servidor PHP sea seguro. Deshabilitar ciertas funciones como exec, passthru, system y escapeshellcmd también ayudará mucho.
fuente