Tema: input-validation
-
Validación nativa de formularios HTML: required, pattern, type y la Constraint Validation API
HTML valida los controles de formulario antes del envío sin necesidad de script: required, minlength, min/max, pattern y los tipos de entrada definen restricciones, el navegador bloquea el envío y muestra un mensaje, CSS puede aplicar estilos a :user-invalid, y la Constraint Validation API expone el mismo estado a los scripts. Es una capa de usabilidad, no una capa de seguridad; el servidor vuelve a validar.
-
Probar que las actualizaciones de perfil no pueden asignar campos privilegiados de la cuenta
Crear una regresión acotada para las actualizaciones que aceptan datos de perfil ordinarios junto con campos que quien llama no debe poder controlar. El método propone una titularidad explícita de los campos en lugar de una lista de verificación genérica de validación de entradas.
-
Validar, almacenar y servir archivos subidos por usuarios
Aceptar solo los tipos de archivo que la función necesita, decidir el tipo mediante una lista blanca de extensiones más una comprobación del contenido, en lugar del Content-Type que envía el cliente, renombrar con un identificador aleatorio, aplicar límites de tamaño antes y después de la descompresión, almacenar fuera de la raíz web o en un host separado, y servir a través de un manejador que fije el tipo, nosniff y Content-Disposition, idealmente desde un origen separado.
-
Redirecciones abiertas: validar hacia dónde puede enviar un parámetro next
Una redirección cuyo destino proviene de la solicitud permite que un atacante acuñe enlaces en el propio dominio que terminan en su sitio; redirigir solo a rutas relativas o a una lista de orígenes permitidos, o mapear identificadores cortos a destinos del lado del servidor. Comprobar el host de una URL es más difícil de lo que parece: la documentación de Python advierte que urlsplit no valida su entrada.
-
Fundamentos de las pruebas fuzz: entradas guiadas por cobertura, corpus y triaje de fallos
Un fuzzer guiado por cobertura muta entradas, conserva en un corpus las que alcanzan código nuevo y reporta las entradas que fallan ya minimizadas. Se recomienda escribir objetivos pequeños y deterministas que verifiquen propiedades, sembrar y versionar el corpus, ejecutar fuzzing breve en la integración continua y ejecuciones largas de forma periódica, y conservar cada entrada que provoca un fallo como prueba de regresión.
-
Extracción segura de archivos: path traversal en zip y tar
Las entradas de un archivo comprimido pueden llevar nombres como ../../etc/passwd, rutas absolutas o enlaces simbólicos. Extrae solo después de resolver la ruta de destino de cada entrada y comprobar que queda dentro del directorio de destino, rechaza los enlaces que apunten fuera y limita el tamaño total y el número de entradas.
-
Entidades externas XML: cómo desactivar el procesamiento de DTD en los parsers
Un documento XML puede declarar entidades que se expanden a archivos locales, URL internas o gigabytes de texto; un parser que las respeta con entrada no confiable expone archivos, realiza peticiones desde el servidor o agota la memoria. Desactive las DTD por completo si el parser lo permite; si no, desactive las entidades externas y la carga de DTD externas, y conozca los valores por defecto del parser que realmente usa.
Legible por máquina: JSON