Hoy aprendí que la protección CSRF de Django utiliza la comprobación del encabezado de referencia (r) er, además de verificar un campo de formulario oculto contra una cookie. Parece ser importante, a juzgar por los documentos y el problema a continuación.
Sin embargo, solo comprueba esto a través de HTTPS. También he notado que casi ningún otro sitio web verifica el referer [ya que desactivé el envío de dicho encabezado y la mayoría de los formularios todavía funcionan].
Tengo dos preguntas:
- ¿Cómo funcionaría el ataque que sería posible sin esta comprobación? ¿Https protege ¿Contra los ataques del hombre en el medio?
- ¿Cómo protegen otros sitios web contra esto? ¿Y Django no proyecta para http?
La información que encontré:
Además, para las solicitudes HTTPS, CsrfViewMiddleware realiza una comprobación estricta del remitente. Esto es necesario para hacer frente a un ataque Man-In-The-Middle que es posible bajo HTTPS cuando se usa una sesión independiente de la sesión, debido a que los encabezados HTTP 'Set-Cookie' son (desafortunadamente) aceptados por los clientes que están hablando con un sitio bajo HTTPS. (La comprobación del Referer no se realiza para las solicitudes HTTP porque la presencia del encabezado del Referer no es lo suficientemente confiable en HTTP).
Lamentablemente, esta comprobación es absolutamente necesaria para la seguridad de la protección CSRF de Django. Sin él, no podemos evitar los ataques de intermediarios en los sitios SSL. Tomamos la decisión de que prevenir MITM era una compensación más valiosa que interrumpir los sitios para la pequeña minoría de usuarios que bloquean el encabezado de una manera que no mejora la privacidad.