Validar Todas las Entradas
La validación de entradas es una colección de técnicas que aseguran que solo los datos con formato adecuado puedan ingresar a una aplicación de software o componente del sistema.
Es vital que se realice la validación de entradas para proporcionar el punto de partida para una aplicación o sistema seguro. Sin validación de entradas, la aplicación/sistema de software seguirá siendo vulnerable a ataques nuevos y variados.
Consulte el control proactivo C3: Validar Todas las Entradas y Manejar Excepciones y sus hojas de referencia para más contexto del proyecto Top 10 Controles Proactivos de OWASP, y use la lista a continuación como sugerencias para una lista de verificación adaptada al proyecto individual.
1. Validez sintáctica y semántica
- Identificar todas las fuentes de datos y clasificarlas en confiables y no confiables
- Validar todos los datos de entrada de fuentes no confiables, como datos proporcionados por el cliente
- Codificar la entrada a un conjunto de caracteres común antes de validar
- Especificar conjuntos de caracteres, como UTF-8, para todas las fuentes de entrada
- Si el sistema admite conjuntos de caracteres extendidos UTF-8, validar después de completar la decodificación UTF-8
- Verificar que los valores de encabezado del protocolo en solicitudes y respuestas contengan solo caracteres ASCII
- Validar datos de redirecciones
- Validar el rango de datos y también la longitud de datos
- Utilizar la canonicalización para tratar con ataques de ofuscación
- Todos los fallos de validación deben resultar en el rechazo de la entrada
2. Bibliotecas y frameworks
- Realizar toda la validación de entrada en un sistema confiable [^SCP1]
- Usar una biblioteca o framework de validación de entrada centralizado para toda la aplicación
- Si la rutina de validación estándar no puede hacerse cargo de algunas entradas, use verificaciones discretas adicionales
- Si cualquier entrada potencialmente peligrosa debe permitirse, implemente controles adicionales
- Validar para los tipos de datos esperados utilizando una lista de permitidos en lugar de una lista de denegados
3. Validar datos serializados
- Implementar verificaciones de integridad o cifrado de los objetos serializados para prevenir la creación de objetos hostiles o la manipulación de datos
- Aplicar restricciones estrictas de tipo durante la deserialización antes de la creación de objetos; típicamente se espera un conjunto definible de clases
- Aislar las funciones que hacen deserialización para que se ejecuten en entornos de muy bajo privilegio, como contenedores temporales
- Registrar excepciones y fallos de deserialización de seguridad
- Restringir o monitorear la conectividad de red entrante y saliente de contenedores o servidores que deserializan
- Monitorear la deserialización, por ejemplo, alertando si un agente de usuario deserializa constantemente
Referencias
- Hoja de Referencia: Validación de Entrada de OWASP
- Proyecto Java HTML Sanitizer de OWASP
- Top 10 Controles Proactivos de OWASP
Traducción de versión original en inglés.
La Guía del Desarrollador de OWASP es un esfuerzo comunitario; si hay algo que necesita cambiar, entonces cree un issue o edítelo en GitHub.
[^SCP1]: Lista de verificación de prácticas de codificación segura