Securizando PHP

securizando php

PHP es un lenguaje de programación orientado originalmente a la creación de páginas web dinámicas. Como bien sabemos, un hacker puede usar alguna vulnerabilidad de una aplicación PHP para realizar un ataque sobre nuestra web o en el peor de los casos sobre un servidor. A continuación te mostramos cómo securizar PHP. Cabe mencionar que existen muchas configuraciones distintas según el servidor, pero una configuración general podría ser la que veremos a continuación.

Para empezar a securizar PHP, necesitamos tener acceso root al servidor, o bien pedirle a la empresa que nos provee del hosting que lo haga por nosotros. Si se trata de un hosting reseller o compartido, seguramente PHP ya esté securizado (o al menos debería estarlo).

Nota: todas las modificaciones deben hacerse dentro del archivo php.ini del server, a no ser que se indique lo contrario. Recuerda que lo haces bajo tu propio riesgo.

1) Deshabilitar expose_php

expose_php es una variable que permite mostrar qué versión de PHP está instalada en el servidor en la cabecera HTML. Por ende debe ir desactivada, así un atacante no podrá conocer qué versión de PHP usas. Debemos desactivar la variable configurándola como se ve a continuación:

expose_php = Off

2) Deshabilitar funciones peligrosas

Hay algunas funciones que pueden llegar a suponer un riesgo para la seguridad del servidor. A no ser que alguna sean necesarias, deberían ser deshabilitadas las siguientes:

disable_functions ="system, system_exec, passthru, shell, shell_exec, exec, popen, pclose, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, pfsockopen, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, escapeshellcmd, escapeshellarg, phpinfo"

3) Deshabilitar session.use_trans_sid

Con la variable session.use_trans_sid resulta más fácil la programación de aplicaciones que usen sessiones. La desventaja es que cuando está activado puede llegar a ser usado para simular una sesión activa en el server. Para desactivarlo debe quedar así:

session.use_trans_sid = Off

4) Deshabilitar register_globals

register_globals no es una varible peligrosa, sino que lo peligroso es el uso inapropiado de ella, ya que inserta scripts con toda clase de variables, como por ejemplos las que proceden de formularios HTML. Se deshabilita de la siguiente forma:

register_globals = Off

5) Desactivar acceso a URL remotas en funciones de manejo de ficheros

Funciones como include, fopen o file_get_contents permiten, además de hacer llamadas a ficheros locales, llamar a ficheros vía URL, esto puede provocar graves errores de seguridad invocando a scripts maliciosos que se encuentran fuera de nuestro servidor y su ejecución remota. Para desactivar:

allow_url_fopen = Off

6) Safe Mode

Activar safe_mode implica que los scripts PHP únicamente pueden acceder a los ficheros que tienen como propietario el mismo que ellos. De este modo evitamos por ejemplo que tengan acceso de lectura a ficheros de sistema como /etc/passwd entre otros.

safe_mode = On

Efectivamente, esto puede ser un problema en el momento que necesitamos acceder a información generada por otros usuarios en el sistema (ficheros de otras aplicaciones por ejemplo). La solución es la siguiente:

safe_mode = Off
safe_mode_gid = On

Activamos safe_mode_gid en lugar de safe_mode, de modo que en lugar de revisar el usuario se revisa el grupo.

Otro punto a tener en cuenta con safe_mode es que no podremos ejecutar binarios. Únicamente aquellos que ubiquemos en el directorio especificado en la configuración:

safe_mode_exec_dir = /directorio

7) Visualización y registro de errores

display_errors = Off
log_errors = On
error_log = /ruta/fichero/log

Con estas tres directivas, evitamos que cualquier error o warning se muestre por pantalla y hacemos que se registren directamente en un log especificado.

8) Deshabilitar enable_dl

Esta variable se usa solamente en conjunto con el servidor web Apache. Sirve para activar o desactivar la carga dinámica de extensiones PHP con dl() por servidor virtual o directorio. Con la carga dinámica, es posible ignorar todas las restricciones open_basedir. Para desactivarla debe quedar como:

enable_dl = Off

Y eso sería todo. Recordemos que esto es una securización moderada de PHP, hay otras que pueden ser más agresivas pero a veces suelen complicarle las cosas a los programadores.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *