Protegiendo tu aplicación PHP

No cabe duda que hoy en día la mayoría de las páginas webs están desarrolladas mediante un lenguaje de programación y su contenido es dinámico. Existen diversidad de lenguajes de programación para ello: ASP, PHP, JavaScript, Python, Perl, etc., aunque sin duda, uno de los más utilizados es PHP.

Cuando se programa una aplicación web, la cual dispone de formularios, URLs, o en definitiva, entradas manejadas por el usuario de la aplicación, nunca, y repito, nunca, debemos confiar en que el usuario tendrá buenas intenciones y los datos que provengan de estas entradas serán siempre los que esperamos. Debemos tener en cuenta siempre la siguiente idea: entradas que provienen del usuario, pueden convertirse en código en el servidor. A continuación os comentamos algunos consejos a tener en cuenta para hacer nuestra aplicación web más segura.

Una pregunta puede rondar en vuestras cabezas, ¿qué entradas se deben observar y cómo podemos controlar que éstas sean correctas? Como mínimo, debemos controlar las entradas GET y POST además de Cookie y variables de sesión. Lo primero que debemos hacer es sanitizar estas entradas, es decir, controlar que el que valor que contienen no pueda convertirse en una amenaza en nuestro servidor. En definitiva, revisaremos nuestro código para verificar si puede ser vulnerable y tomar las medidas necesarios. En este enlace podemos encontrar algunas recomendaciones ante los ataques más comunes:

OWASP – PHP Top 5: https://www.owasp.org/index.php/PHP_Top_5

Además de ello, debemos asegurar que nuestras Cookies no serán entregadas nunca al navegador, con el fin de evitar que ataques del tipo XSS puedan robar nuestra sesión y suplantarla. Esto podemos conseguirlo haciendo que nuestras Cookies tengan activado su atributo HttpOnly. Para saber cómo activar esta propiedad en PHP podéis visitar la siguiente dirección:

OWASP – HttpOnly: https://www.owasp.org/index.php/HttpOnly

No obstante, aunque ya tengamos la propiedad HttpOnly activada y el valor de nuestra Cookie ya no sea entregada al navegador cliente (por ejemplo mediante Javascript), existen otros métodos que permiten extraer el valor de la Cookie aún cuando tenemos HttpOnly a True. Esta técnica es conocida como XST (Cross Site Tracing).  Para impedir este tipo de ataque, es esencial que los métodos PUT, DELETE, CONNECT y TRACE estén deshabilitados en sus servidores Web ya que todos representan un riesgo de seguridad. Más información en el siguiente enlace:

OWASP – Cross Site Tracing: https://www.owasp.org/index.php/Cross_Site_Tracing

Una vez hemos modificado nuestro código, debemos ser conscientes de que los ataques cambian a diario y que podemos haber dejado alguna entrada sin sanitizar correctamente. Además, cualquier modificación posterior en nuestra aplicación puede volver a dejar expuesta nuestra web. Por suerte, existen algunas aplicaciones que nos ayudan a controlar de manera automática la información que llega en cada petición a nuestro servidor. Analizando esta información podremos comprobar también si contiene información maliciosa y detener esta petición. Para ello existe una aplicación llamada PHPIDS. Esta aplicación no deja de ser un IDS (Intrusion Detection System) pero enfocado a aplicaciones escritas en PHP. PHPIDS sufrió un parón en su desarrollo pero por suerte ha vuelto a la carga y tenemos su última versión 0.7.

La idea principal del funcionamiento de PHPIDS es la siguiente. Este IDS analiza las entradas y nos devuelve mediante una cifra numérica el grado de riesgo de estas entradas. Es labor del programador decidir a partir de qué nivel es considerado como entrada no deseada y además qué hacer (cómo actúa la aplicación) desde que se da ese evento. Podéis encontrar más información y descargarlo en su web:

PHPIDS: https://phpids.org/

PHPIDS en Wikipedia: http://en.wikipedia.org/wiki/PHPIDS

Por último, a un nivel más bajo y siendo compatible con las soluciones anteriormente propuestas, podemos hacer uso de ModSecurity. ModSecurity es un firewall de aplicaciones Web que se ejecuta como un módulo dentro de los servidores Apache. El funcionamiento es sencillo: ModSecurity analiza el tráfico HTTP (mediante un conjunto de reglas establecidas) entrante antes de ser entregado al servidor Web. Podéis encontrar más información en:

ModSecurity: http://www.modsecurity.org/

ModSecurity en Wikipedia: http://es.wikipedia.org/wiki/Mod_Security

¡Saludos a todos y felices fiestas!