Nota rápida: este no es un duplicado de protección CSRF con encabezados personalizados (y sin el token de validación) a pesar de algunos solapamientos. Esa publicación explica cómo realizar la protección CSRF en los puntos finales de descanso sin discutir si es realmente necesario. De hecho, muchas de las preguntas de CSRF / descanso que he leído en este sitio hablan sobre cómo asegurar los puntos finales a través de tokens de CSRF sin discutir realmente si es necesario o no. De ahí esta pregunta.
¿Es necesaria la protección CSRF para los puntos finales de la API Rest?
He visto mucha discusión sobre la protección de puntos finales REST contra ataques CSRF, pero después de haber pensado mucho en el tema, estoy muy seguro de que los tokens CSRF en un punto extremo REST no otorgan ninguna protección adicional. Como tal, habilitar la protección CSRF en un punto final REST simplemente introduce un código inútil para su aplicación, y creo que debería omitirse. Puede que me esté perdiendo algo, de ahí esta pregunta. Creo que ayudará a tener en cuenta por qué es necesaria la protección CSRF en primer lugar, y los vectores de ataque que protege contra:
¿Por qué CSRF?
Realmente se reduce a la capacidad de los navegadores de presentar automáticamente las credenciales de inicio de sesión para cualquier solicitud mediante el envío de cookies. Si un identificador de sesión se almacena en una cookie, el navegador lo enviará automáticamente junto con todas las solicitudes que regresan al sitio web original. Esto significa que un atacante no tiene que conocer los detalles de autenticación para realizar una acción como el usuario víctima. Más bien, el atacante solo tiene que engañar al navegador de las víctimas para que haga una solicitud, y las credenciales para autenticar la solicitud se enviarán gratis.
Ingresa una API REST
Los puntos finales de la API Rest tienen una diferencia muy importante con respecto a otras solicitudes: son específicamente sin estado, y nunca deben aceptar / usar datos de una cookie o sesión. Como resultado, una API REST que se adhiere a la norma es automáticamente inmune a tal ataque. Incluso si una cookie fue enviada por el navegador, cualquier credencial asociada con la cookie sería ignorada por completo. La autenticación de las llamadas a una API REST se realiza de una manera completamente diferente. La solución más común es tener algún tipo de clave de autenticación (un OAuth Token o similar) que se envía en algún lugar del encabezado o posiblemente en el propio cuerpo de la solicitud.
Dado que la autenticación es específica de la aplicación, y dado que el navegador en sí mismo no sabe qué es el token de autenticación, no hay forma de que el navegador proporcione automáticamente las credenciales de autenticación, incluso si se trata de un truco para visitar el punto final de la API. Como resultado, un punto final REST sin cookies es completamente inmune a los ataques CSRF.
¿O me falta algo?