Validación de los datos de entrada
- Área: Codificación y Validación de entrada/salida
- Tipo de pauta: Directriz
- Carácter de la pauta: Obligatoria
Asegurar que los datos de entrada no contienen código malicioso que pueda alterar el correcto funcionamiento de la aplicación
Existen varias fuentes de entrada de datos:
- Cabeceras HTTP.
- Variables de Entorno o sesión.
- Todas las peticiones GET / POST e información en Cookies.
Esto incluye campos supuestamente resistentes a ser manipulados como botones de opción múltiple, listas desplegables, etc. En general, cualquier código HTML que se encuentre del lado del cliente puede ser sobrescrito para que haga lo que el atacante quiera.
Los datos recibidos de una entrada no confiable deben ser revisados apropiadamente antes de utilizarse por primera vez.
Pautas
Título | Carácter |
---|---|
Validaciones en el servidor | Obligatoria |
Utilizar listas blancas | Recomendada |
Utilizar listas negras | Recomendada |
Escapado de caracteres | Obligatoria |
Construcción de cabeceras HTTP | Obligatoria |
Validaciones en el servidor
Validar los parámetros de entrada siempre en el servidor antes de procesarlos
La validación en el cliente, no proporciona ninguna protección para el servidor. Un atacante puede utilizar varias técnicas (como desactivar JavaScript, utilizar telnet, o utilizar un proxy de pruebas de seguridad, tales como WebScarab) para omitir la validación del lado del cliente.
La validación en el cliente está muy extendida, pero no es completamente segura. La única ventaja de la validación en el cliente, desde una perspectiva de seguridad, es que la detección de intrusos puede ser más eficaz, debido a que sólo los usuarios de entrada prevalidados deben llegar al servidor.
Utilizar listas blancas
Rechazar cualquier entrada que no corresponda estrictamente a las especificaciones.
Es recomendable utilizar una estrategia de validación de entrada "aceptar buena conocida", es decir, aceptar las entradas que cumpla estrictamente con las especificaciones. Rechazar cualquier entrada que no corresponda estrictamente a las especificaciones, o transformarlo en algo que lo haga.
Utilizar listas negras
Rechazar cualquier entrada que corresponda con alguno de los elementos de la lista
Mediante la ultilización de listas negras se consigue excluir todas aquellas entradas maliciosas o mal formadas
Escapado de caracteres
Cambiar un caracter propio del lenguaje por su correpondiente codificación
Escapar caracteres permite librarnos de caracteres específicos propios de los lenguajes de programación que pueden ser interpretados por el lenguaje y producir alteraciones en el correcto funcionamiento de nuestra aplicación. Un <alert> de javascript sería codificado como %3Calert%3E no pudiendo ser interpretado por la página html.
A continuación se enumeran alguno caracteres y sus escapados:
< %3C > %3E
# %23 % %25
{ %7B } %7D
| %7C \ %5C
^ %5E ~ %7E
[ %5B ] %5D
` %60 ; %3B
/ %2F ? %3F
: %3A @ %40
= %3D & %26
Construcción de cabeceras HTTP
No construir encabezados HTTP con datos de entrada no validados.
La construcción de encabezados HTTP debe realizarse con datos de entrada validados ya que un atacante puede llegar a conocer la respuesta que da el servidor, y cometer algún ataque como el cross-site scripting o envenenamiento de caché contra el sistema
Contenidos relacionados
Código | Título | Tipo | Carácter | |
---|---|---|---|---|
LIBP-0360 | Uso de applets | Libro de pautas | Directriz | Obligatoria |