PHP Formularios Seguros

Introducción

Me estoy enfrentando por primera vez a los temas de seguridad. Antes que esto ya he visto algo sobre las sesiones en PHP y su relación con la seguridad, donde intenté entender conceptos como session fixation y session hijacking. Pero ahora mi interés está en la seguridad de los formularios, comprendiendo conceptos como XSS (Cross-Site Scripting) y CSRF (Cross-Site Request Forgeries). Los temas de seguridad son complejos cuando no se conoce por completo todo lo que puede influir: HTML, CSS, protocolos de redes, servidores, script, bases de datos y un largo etcétera. Pero si esperamos a ser un experto en todas estas materias antes de empezar con la seguridad creo que podemos tener algún problema.

Por lo tanto pienso que es conveniente atacar este asunto cuanto antes, aún a riesgo de no abarcarlo completamente. El enfoque es pensar que es mejor un poco de seguridad que nada. Entendiendo al menos superficialmente de que estamos hablando, podemos diseñar otros elementos de nuestro sitio teniendo en cuenta el aspecto de la seguridad desde el inicio del replanteamiento del diseño.

Aunque esta serie de temas habla de "hacer formularios seguros" deberíamos entenderlo como "hacer formularios más seguros", pues ningún sistema está completamente libre de todas las amenazas y por lo tanto la seguridad absoluta no existe. El objetivo es entonces tratar de reducir los daños causados actuando sobre las vulnerabilidades, es decir, aquellos puntos de nuestro sistema por donde puede llevarse a cabo algo que no deseamos.

Y son los formularios, un mecanismo para que el usuario nos remita datos al servidor, un posible punto débil de nuestro sistema. La norma básica es desconfiar de todos los datos recibidos. Pero no sólo por cuestiones de seguridad. Por ejemplo, si esperamos en el servidor un dato numérico y el usuario envía una cadena de texto sin dígitos numéricos, pudiera suceder que operasemos matemáticamente con ese dato con el consiguiente error si no realizamos previamente alguna validación del mismo.

En el siguiente capítulo se expone el XSS y se realizan algunos ejemplos para cerciorarnos de la gravedad del asunto. El tercer capítulo habla de las técnicas PHP que podemos usar para filtrar entradas y evitar XSS. A continuación se aborda otra vulnerabilidad que hemos de prevenir, el CSRF. Otro capítulo se dedica a comprender las configuraciones del archivo php.ini que tienen relación con la seguridad. Los últimos capítulos se dedican a validar los datos recibidos de un formulario.