5 Vulnerabilidades comunes en PHP

Por el 15 de junio de 2006

en: Programacion

El proyecto abierto de seguridad Web OWASP redactó un documento interesante que enumera lo que piensan sobre las cinco vulnerabilidades más importantes de Internet.

Estas vulnerabilidades pueden, por supuesto, existir en PHP. Aquí están algunas soluciones a cómo evitarlas. He incluido enlaces y referencias relacionadas en aquellos casos que son más importantes.

1. Parámetros no validados

Lo más importante en este punto es desactivar las register_globals. Este ajuste de configuración esta desactivado por defecto a partir de PHP 4.2.0.

Antes de utilizar las variables globales, valídalas para asegurarte de que no contienen ninguna entrada inesperada. Si sabes qué tipo de valor estás esperando, cerciorarte de que lo que tienes es acorde con el formato previsto. Por ejemplo, si estás esperando un código postal de España, cerciorarte de que tu valor sea cinco dígitos.

A menudo, las expresiones regulares son la manera más fácil de validar datos,aquí os dejo un breve ejemplo con un código postal de los Estados Unidos, su formato esperado sería 5 dígitos o 5 dígitos un guión y 4 dígitos más:

if (preg_match(‘/^\d{5}(-\d{4})?$/’,$_GET['zip'])) {
$zip = $_GET['zip'];
} else {
die(‘Formato Incorrecto.’);
}
}

Ver también:
• Manual de PHP: Usar las Register Globals

2. Cuidado con el control de acceso

En vez de programar tu propia aplicación para el control de acceso, utiliza los módulos de las librería PEAR que son bastante buenos.

Ver también:
• Paquetes de PEAR: Auth, Auth_HTTP.

3. Vulnerabilidades en el manejo de cuentas y sesiones

Utilizar las funciones incorporadas en PHP para manejo de sesiones. Sin embargo, ten cuidado con la configuración del servidor y de cómo almacena la información de la sesión. Por ejemplo, si el contenido de la sesión se almacena como archivos en /tmp, cualquier usuario que acceda a los registros en el servidor pueden ver el contenido de todas las sesiones.

Almacena las sesiones en una base de datos o en una parte del sistema de ficheros que solo los administradores de la web puedan tener acceso.

Para evitar que sniffers consigan los identificadores de la sesión, haz que estas se envien sobre SSL. No necesitas hacer nada especial al código PHP cuando estás utilizando una conexión SSL, sin embargo si necesitas configurar servidor.

Ver también:
• Manual de PHP: Funciones para sesiónes php

4. Defectos en Cross-Site Scripting (XSS)

Nunca muestres información que venga de fuera sin filtrarla primero. Filtra las variables antes incluyendolas en campos ocultos de un formulario.

PHP te da un montón de herramientas para filtrar información:

• htmlspecialchars()Esta función es útil para evitar que el texo entrado por el usuario contenga marcas HTML, como ocurre en aplicaciones de foros o libros de visita.
• strtr() Filtra con funciones como esta todos aquellos caracteres que no desees.
• strip_tags() Elimina marcas HTML y PHP de una cadena.
• utf8_decode() Convierte a la ISO-8859-1 caracteres en una cadena codificada con Unicode UTF-.Algunos tipos de ataques vienen enmascarados con una codificación Unicode.
Ver también:
• Manual de PHP: htmlspecialchars(), strtr(), strip_tags(), utf8_decode()

5. Problemas de la gestión de error

Si los usuarios (y los hackers) pueden ver los mensajes de error devueltos por PHP, de tu base de datos, o de los programas externos, pueden hacerse una idea sobre cómo se organiza tu sistema y qué software utilizas. Esto hace más fácil a los hackers romper tu sistema.

Los mensajes de error no deben contener ninguna información descriptiva del sistema. Configura PHP para poner los mensajes de error en el registro de errores de tu servidor en vez de mostrarlos:

log_errors = On
display_errors = Off

Ver también:
• Manual de PHP: Funciones para la gestión de logs

Conclusión

Como vereis ninguno de las vulnerabilidades estan estudiadas en profundidad he tratado de ser breve para que el artículo no llegue a ser aburrido, si te ha interesado alguna de ellas, sólo tienes que investigarla.

Este es un artículo orientativo y que espero que os ayude a detectar e incluso solucionar algún problema que se te haya planteado en tus aplicación web.

Fuente:OWASP Top ten

Dejar un comentario