Los tokens CSRF se usan mucho .
El servidor establece un token en la cookie para ese dominio que (1) incluye en el formulario HTML o (2) Javascript puede leer e incluir en la solicitud. El servidor verifica que el token en la solicitud coincida con el token en la cookie.
¿Pero por qué no simplemente verifica el encabezado de Origen? Según OWASP , por eso existe:
El estándar Origin HTTP Header se introdujo como un método de defensa contra CSRF y otros ataques entre dominios.
"¿El origen no está allí? Si no, está bien. Si lo está, ¿es uno en el que yo confío (por ejemplo, el mismo origen)? Si es así, está bien".
Los tokens CSRF pueden ser problemáticos. Son
- más difícil de entender para los principiantes: "Espere ... ¿Lo envío dos veces? ¿Qué es CRSF otra vez?"
- requiere cookies (concedidas, no suele ser un problema)
- más difícil de implementar: necesita controlador y vista
- menos flexible: nunca se puede trabajar entre dominios
- extraño en la configuración no web: "¿Por qué su API necesita un token CSRF?" "Oh, porque JS también usa eso"
- más incómodo de implementar globalmente: "Vaya, olvidé la etiqueta CSRF aquí entre mis 25 campos de formulario HTML"
Dadas estas desventajas, ¿por qué los tokens CSRF se usan tan comúnmente, en lugar del encabezado de origen?