Asegurando una instalación de PHP
Cuando instalamos PHP este viene con una serie de valores por defecto que no lo hacen adecuado para un sitio en producción y puede provocar que utilicemos técnicas inseguras. Todo esto puede solucionarse si ponemos en práctica el listado de tareas que debemos realizar antes de abrir el sitio al gran público que nos deja Ayman Hourieh.
- Deshabilitar las URL remotas para funciones que manejen archivos:
- allow_url_fopen = Off
- Register Globals
- register_globals = Off
- Restringiendo lo que PHP puede leer o escribir
- open_basedir = /var/www/htdocs/files
- Safe Mode
- safe_mode = Off
- safe_mode_gid = On
- Límites para los tiempos de ejecución
- max_execution_time = 30 ; Max script execution time
- max_input_time = 60 ; Max time spent parsing input
- memory_limit = 16M ; Max memory used by one script
- upload_max_filesize = 2M ; Max upload file size
- post_max_size = 8M ; Max post size
- Limitar el acceso a ciertos tipos de archivos mediante directivas de Apache
- <FilesMatch "\.(inc|.*sql|.*~)$">
- Order allow,deny
- Deny from all
- </FilesMatch>
- Mensajes de error y logging
- display_errors = Off
- log_errors = On
- Ocultar la presencia de PHP
- expose_php = Off
Resumen
Todos los cambios realizados quedan concretados en un php.ini tal que así:
- ; php.ini
- allow_url_fopen = Off ; Disable URLs for file handling functions
- register_globals = Off ; Make sure this hellish fiend is dead
- open_basedir = /var/www/htdocs/files ; Restrict file handling functions to a subdirectory
- safe_mode = Off ; Disable this, the next is often more practical
- safe_mode_gid = On ; Enable safe mode with group check
- safe_mode_exec_dir = /var/www/binaries ; Restrict execution functions to this directory
- safe_mode_allowed_env_vars = PHP_ ; Restrict access to environment variables
- max_execution_time = 30 ; Max script execution time
- max_input_time = 60 ; Max time spent parsing inputs
- memory_limit = 16M ; Max memory size used by one script
- upload_max_filesize = 2M ; Max upload file size
- post_max_size = 8M ; Max post size
- display_errors = Off ; Do not show errors on screen
- log_errors = On ; Log errors to log file
- expose_php = Off ; Hide presence of PHP
Y un archivo .htaccess o parte de la configuración de Apache
- # Apache configuration or .htaccess
- <FilesMatch "\.(inc|.*sql|.*~)$">
- Order allow,deny
- Deny from all
- </FilesMatch>
Más información y explicaciones en el artículo original, en inglés: Checklist for Securing PHP Configuration
Otras entradas
Esta entrada fue publicada por Alma Fernández el Viernes, 6 de Octubre de 2006 y está archivada en: PHP. Puedes dejar un comentario, o enviar un trackback desde tu sitio.




