Cinco detalles a cuidar al recibir datos de tus usuarios

 Son muchísimas las ocasiones en las que nuestras aplicaciones solicitan a los usuarios algún tipo de información: Nombre, correo electrónico, texto de opinión, nueva contraseña… Usualmente lo hacemos a través de formularios que contienen distintos campos a rellenar, campos que nuestras aplicaciones van a recibir y posteriormente van a procesar; por tanto, estos campos, que son manipulables por los usuarios, representan una vía a través de la cual se puede amenazar la seguridad de nuestras aplicaciones. Entonces ¿que es lo más básico a tener en cuenta al usar estos campos de entradas de datos?.

 Los meta caracteres son caracteres que pueden tener un significado diferente en función de la parte de tu sistema que lo esté procesando. Si tu aplicación espera recibir caracteres en una codificación que usa un único byte para almacenar cada carácter, pero el usuario introduce datos en una codificación que use dos bytes por carácter, tu aplicación los dividirá y procesará byte por byte, y aquí nos pueden hacer trampas para introducir un código inesperado, un código que no es lo que parece. Algunos meta caracteres peligroso pueden ser ‘ y “ y \ y | y \x00 y \xff y \x13…

 Deberías chequear los formatos y los tipos de datos recibidos antes de procesarlos. Si allí donde tu aplicación espera recibir un texto pequeño es obsequiada con un archivo de imagen, es muy probable que tu apreciada creación tienda al error en su gestión.

 Permitir sólo la cantidad de datos necesaria es de vital importancia. Si te interesa la seguridad informática empieza a familiarizarte con el término buffer overflow, pues es realmente recurrente en lo referente a ataques de seguridad y está relacionado con esto que te paso a explicar. Un desbordamiento de búfer ocurre cuando la cantidad de datos introducida por el usuario es mayor que la cantidad de memoria asignada para almacenarla (búfer). Esto puede ocasionar que en tu código se sobrescriban variables, que se generen errores incontrolados, que una instrucción sobrescriba a otra, etc.

  Piensa en las interfaces ocultas como en capas de tu aplicación que, aunque no estén visibles para los usuarios ilegítimos, pueden ser intuidas por estos. Un ejemplo muy básico puede ser el de una aplicación web que use la variable $_GET[‘template’] para permitir o denegar la inclusión de scripts en PHP. Seguro que el más novato de los atacantes prueba cosas del estilo http://aplicaionweb.php?template=test o http://aplicacionweb.php?template=debug o http://aplicacionweb.php?template=admin.

 Tu aplicación procesa las instrucciones que tu has programado, y procesa también los datos recibidos a través de las entradas de las formularios. Entonces ¿es posible enviar a la aplicación, a través de estas entradas, instrucciones que sean procesadas y con fines maliciosos?. La respuesta a esta pregunta me parece ridículamente obvia después de haberla planteado. Los términos con los que hay que familiarizarse en este aspecto son Cross-site y scripting desde Shell remota, pues son los métodos más conocidos de introducción de instrucciones inesperadas en las entradas.