Supongamos que el atacante pudo inyectar JavaScript en el sitio web. Obviamente, puede hacer cualquier solicitud HTTP para back-end imitando las acciones del usuario, a menos que exista alguna confirmación, como el código SMS, que requiera la interacción directa del usuario (incluso en este caso, el JavaScript malicioso podría engañar al usuario). Entonces, supongo, este vector de ataque no podría ser defendido razonablemente. Pero si el atacante roba la sesión, puede hacerse pasar por el usuario y hacer casi cualquier cosa. Así que estoy pensando en la defensa de este vector. Claro, el servidor podría verificar la dirección IP, etc., pero no siempre es posible.
Lo primero: almacenar la sesión en una cookie solo de HTTP. JavaScript no puede robarlo. Hasta ahora tan bueno. Pero hay otra debilidad: el sitio web de terceros puede crear una etiqueta de formulario con la acción de mi servidor y enviar este formulario con la cookie del usuario. Uno podría usar tokens CSRF, pero nuevamente deberían estar disponibles para JavaScript, podrían ser robados si JavaScript está comprometido, deben mantenerse en el servidor web, lo que perjudica la escalabilidad, etc. Estoy pensando en usar el método PUT para cada acción REST (bueno, obviamente no será un REST adecuado, llamémoslo API HTTP). No hay forma de engañar al usuario para que emita una solicitud PUT desde el sitio web de terceros y la cookie solo de HTTP evitará el robo del valor de la cookie.
No estoy viendo este uso, ¿así que supongo que me estoy perdiendo algo y debería haber una forma más sencilla de proteger los puntos finales?