Seguramente me estoy perdiendo algo en la imagen de cómo funcionan los ataques y protecciones de CSRF.
Mi entendimiento en un escenario de envío de formularios es que la protección se basa en un token impredecible, de alguna manera se supone que el atacante no puede obtener el token, ¿por qué?
Si el atacante es lo suficientemente bueno para hacerme enviar un formulario (como lo menciona OWASP ) ¿Qué le impediría recibir el token antes de enviarlo?
Hay un límite en el tamaño / sintaxis de javascript que se puede inyectar o es solo la suposición de que estoy usando un navegador moderno con la Política del Mismo Origen, ¿qué es lo que no veo?
edit
Mi duda, si soy un atacante y puedo inyectar javascript en el formulario del usuario, ¿por qué no puedo obtener (usando ajax) el formulario con el token secreto, extraer e inyectar el token en el formulario que se va a enviar? ?
edit 2
Perdóneme por ser pedante, pero estoy tratando de usar la protección CSRF en un servidor php y puedo configurarlo mal si no entiendo.
Con respecto al ejemplo POST escenarios de OWASP con submit onload , evil.com
es el sitio que el atacado está visitando, ¿no? Se activará una publicación enviada al targetSite.com
, la carga javasript en el ejemplo es simple, pero podría haber sido complejo al usar un get
del formulario con el token secreto antes de enviarlo, ¿verdad?
Si este es el caso, ¿la Política del mismo origen protege al usuario atacado?