Como configurar php de forma segura



Cada día más de 30,000 sitios web son hackeados (sí, cada día), muchos de estos casos se deben a que su servidor no está configurado de forma apropiada. De hecho hace unos años (en el 2011), cuando me iniciaba en todo esto, mi página web… Fue hackeada, desde entonces tuve que investigar mucho sobre seguridad y como protegerme y es por eso que en este articulo voy a mostrarte 5 consejos para configurar PHP de forma segura.

Las configuraciones de PHP se hacen editando un archivo llamado PHP.ini, si tienes dudas de como encontrarlo, puedes aprender como, haciendo clic aquí.

1. Desactivar funciones peligrosas

Con PHP puedes hacer muchas cosas, algunas pueden ser muy peligrosas, por ejemplo, con la función shell_exec, puedes ejecutar cualquier comando del sistema operativo. ¿Por que esto puede ser peligroso?

Al poder ejecutar cualquier comando del sistema operativo, es posible hacer cosas como crear script de PHP, robar claves de bases de datos alojadas en archivos de configuración, etc. Además si instalas alguna aplicación con alguna vulnerabilidad conocida, estarás totalmente expuesto.

Para prevenir estos problemas, lo más recomendable es desactivar estas funciones, esto lo puedes hacer agregando esta línea en el archivo php.ini

disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec, system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo

Si después de hacer este cambio, alguna aplicación deja de funcionar, puedes revisar el log de errores de php, para descubrir cual de estas funciones esta usando alguna de tus aplicaciones y puedes decidir si dejas de usar esa aplicación o dejas la función activa, borrándole de la configuración anterior.

2. Desactivar errores en pantalla

Cuando hay un error en un programa, PHP puede mostrar en pantalla información confidencial, por ejemplo nombres de tablas de base de datos, las rutas de los scripts o fragmentos de código. Para evitar estos problemas, debes de tener una línea como esta en tu archivo php.ini

display_errors = Off

¿Por que es peligroso mostrar errores?. Veamos la siguiente imagen de un error, en este caso, alguien borro la base de datos por accidente (si, eso pasa en la vida real, créeme.), luego de darse cuenta del error, tomo una copia de seguridad y la restauró, problema resuelto ¿o no?, aparentemente si, pero si alguien externo vio ese mensaje de error, ahora tiene el nombre de la base de datos y un usuario y clave validos, prepárense para ser hackeados.

Seguridad en archivo php.ini ocultar errores

3. Desactivar variables globales

Esta opción de PHP tiene un alto grado de inseguridad, incluso fue removida en PHP versión 5.4.0, si tu estas usando una versión anterior, debes revisar si la tienes desactivada, tienes que tener una línea como esta en php.ini

register_globals = Off

¿Por que esto es tan peligroso?, bueno si tienes la opción activada, puedes modificar variables de php al enviarlas desde la url (dirección web). Imagina que tienes un código como este para determinar si un usuario ya paso por el proceso de login.

<?php
if ($_SESSION["logged"]==1)
{
	echo 'Usuario autenticado';
}
else
{
	die('Acceso no autorizado');
}
?>

Ahora si ingresas pasando un parámetro en la dirección:

www.tusitio.com/index.php?_SESSION[logged]=1

¿Adivina que?, el programa te va a tomar como un usuario autentico, aunque nunca hayas ingresado una clave.

4. Desactivar inclusión de archivos remotos

Cuando utilizas las sentencia de PHP include, puedes incluir archivos para reutilizar código, esto es algo imprescindible en todo programa. El problema es que la sentencia permite incluir archivos de otros servidores.

include("http://otro-sitio.com/func.php");

Lo cual te expone a que puedan introducir código malicioso, o incluso te expone si el otro sitio web ha sido hackeado.

Para prevenir esto, debes agregar estas lineas de código a tu archivo php.ini

allow_url_fopen = Off
allow_url_include = Off

5. Ocultar versión de php

Mostrar la versión de PHP que usas, te expone, los atacantes sabrán que versión usas y podrán utilizar alguna falla de seguridad para atacarte, como el punto anterior que vimos. Para protegerte debes agregar esta línea de código a tu archivo php.ini

expose_php=Off

Comentarios adicionales

Si hiciste estos cambios en tu archivo php.ini y aun así no funciona, posiblemente tengas alguna línea repetida, por ejemplo si al inicio tienes la línea expose_php=Off, pero algunas líneas más abajo lo encuentras de esta forma expose_php=On, PHP va a considerar que desactivaste la opción pero luego la activaste, entonces quedara como activa.

Deja una respuesta

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