Considere un punto final como el siguiente. Imaginemos que este punto final actualiza una dirección del usuario que inició sesión, cambiando el código postal. La dirección a actualizar se identifica mediante la ID de la dirección ( kUj3Nkg10
).
Es importante destacar que el identificador es una cadena alfanumérica, no un entero incremental. Si fuera un entero incremental, entonces podría predecirse. El alfanumérico no puede ser predicho o adivinado razonablemente.
Para aclarar, en el ejemplo, la identificación de la dirección se generó aleatoriamente, pero una vez que existe, nunca cambia. La ID no se basa en ningún usuario o datos de dirección específicos.
Además, una actualización de dirección es solo un ejemplo, realmente no importa lo que realmente haga la solicitud. Podría ser actualizar un número de teléfono o eliminar una dirección de correo electrónico. La clave es que este alfanumérico se utiliza para identificar la entidad y que no hay un token CSRF.
Argumento para considerarlo un CSRF
Un token CRSF solo vive y permanece válido para la sesión actual (o posiblemente incluso más corta). La ID única en cuestión sigue siendo la misma (probablemente para siempre). Por lo tanto, se debe utilizar un token CSRF. Es posible que el identificador se pueda usar en otra parte de la aplicación y que esté disponible para que lo vea otro usuario.
Argumento para no considerarlo un CSRF
Es poco probable que el atacante obtenga la ID única. Podría estar cerca de ser tan difícil obtener un token CSRF real en sí mismo.
OWASP define un CSRF como:
Cualquier aplicación que acepte solicitudes HTTP de un usuario autenticado sin tener algún control para verificar que la solicitud HTTP sea única para la sesión del usuario.
Creo que el ejemplo anterior satisface la definición de OWASP, porque la ID de dirección no es exclusiva de la sesión del usuario.