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.

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.