Curso Acelerado de Seguridad - Episodio 1 - Nunca Confíe en Datos Exteriores

Este artículo fue escrito por Damien Metzger, y publicado por primera vez en el blog de PrestaShop, el 22 de junio de 2011..

Si existe una regla en materia de seguridad que un desarrollador debe cumplir, es la siguiente: Nunca confíe en datos Exteriores. Juntos, vamos a echar un vistazo a lo que significa esta palabra moderna:

  • Nunca: En el ámbito de la seguridad, nunca debe tener como objetivo uno inferior a la perfección. Un código 99% seguro es un código que es erróneo. Un hacker no necesita mucho para entrar ilegalmente en él. Una vez que encuentra la debilidad o el punto de entrada, a menudo este puede extender su poder y añadir puertas traseras.

  • Confianza: Al decir "¡No confíe!" nos referimos a que usted debe considerar siempre todos los datos como malicioso. Siempre asuma que la variable que se utiliza ha sido creada por un hacker y nunca estará desprevenido. No trate de pensar en cómo el pirata informático puede hacerlo, sólo suponga que este lo puede realizar.

  • Datos: los datos son generalmente una variable. Se pueden pasar como un parámetro en POST o GET, desde una cookie, o incluso desde $_SERVER (¡no menos exterior que el resto!). Sin embargo, los datos también puede ser el contenido de un archivo o incluso la ruta de ese archivo, la respuesta de un servicio web, el encabezado de peticiones HTTP y mucho otros. Todo lo que no se muestra directamente en el editor de código favorito es considerado datos.

  • Exteriores: La definición de datos "exteriores" debe ser muy estricta. En general, cualquier variable que no ha sido asignada dentro de la función en la que se utiliza debe ser considerada como exterior. Incluso si usted pasó el parámetro tan sólo unos minutos antes, uste no sabe si otro desarrollador modificará el código más adelante, ni tampoco si recuerda exactamente lo que hizo varios meses después.

Por lo tanto, debemos recordar que no todo lo que usamos es confiable. La ventaja de mantener constantemente esta idea en mente se convierte rápidamente en algo natural. Se hace impensable no operar de esta manera.

Entonces, ¿cuál es la solución? ¿Qué debemos hacer con nuestros datos, si no los puede utilizar como quiere?

  • Realice comprobaciones. Si usted espera un número entero, entonces compruebe que está utilizando uno entero. Si se trata de un MD5 Hash, entonces no debería ser otra cosa que caracteres alfanuméricos. Realice expresiones regulares, la lista blanca, cuando sea posible, y la lista negra, cuando no lo sea. Tenga en cuenta sin embargo, que las expresiones regulares absorben al CPU, cuando sea posible utilice funciones más simples: is_numeric(), strstr(), is_array(), o is_object().

  • Realice conversiones. Con una conversión, usted está 100% seguro del tipo de datos que utiliza. Aunque, por supuesto, una conversión en cadena no va a resolver sus problemas, así que la vigilancia constante es siempre importante.

Last updated