Uno de los mecanismos de seguridad clave para el software de aplicación es la validación de entrada, que puede proteger la integridad del sistema y frustrar los ataques comunes de inyección y denegación de servicio.
La mayoría de Internet puede acordar que las declaraciones preparadas pueden validarse contra SQLi, y las bibliotecas de desinfección (que no son vulnerables) emparejadas con la codificación de salida pueden mitigar XSS. Sin embargo, encontré que las recomendaciones para la validación de cargas de archivos a menudo están en desuso y / o son ambiguas.
Para proporcionar un contexto para nuestro sistema:
- Se ejecuta en IIS 10 (Windows Server 2016), que aloja una aplicación .NET.
- La aplicación tiene un punto final que está contactando a un servicio externo, desde el cual recibe imágenes.
Para los controles de protección, tenemos HTTPS autenticados mutuamente (basados en una configuración reforzada de TLS 1.2) y tenemos una lista blanca de direcciones IP permitidas para nuestro contacto para el punto final (redundante con la verificación de certificados, pero nuestro objetivo es la defensa) a fondo). Ahora, cuando se trata de la carga del archivo, actualmente estamos examinando las siguientes validaciones:
- Lista blanca de números mágicos: actualmente tenemos la comprobación de números mágicos, y no estamos seguros de cuán fácil es falsificar este valor. ¿Agregaría validaciones para extensiones o MIME agregaría algo a este paso?
- Verificación del tamaño del archivo y de la longitud del nombre del archivo: limitamos el tamaño de estos datos para evitar DoS.
- Independientemente del nombre de la imagen original, se le cambia el nombre siguiendo la convención interna del sistema, en teoría para evitar ataques de inyección a través del nombre.
- La imagen es escaneada por un antivirus antes de cualquier otra manipulación.
¿A nuestra cadena de validación le faltan pasos importantes? Ya que estamos trabajando con imágenes, he oído hablar de volver a codificarlas para eliminar ataques, pero no he podido encontrar ningún detalle sobre este tema.