Por qué el JS de CSRF no puede leer el token GETting html

7

1) El usuario está registrado en bank.com en una pestaña, donde todo está protegido por tokens CSRF. Luego abre evil.com en otra pestaña.

2) Javascript en evil.com podría intentar realizar una solicitud POST a bank.com/send_money solo si supiera csrf_token.

3) Para revelar csrf_token, javascript en evil.com podría intentar hacer una llamada GET ajax a bank.com/send_money para obtener exactamente el mismo usuario html al visitar esta página en su navegador. Y luego lee el token.

PREGUNTA: ¿por qué el último paso fallará y siempre fallará?

Según tengo entendido, bank.com realmente responderá a esta solicitud y procesará todo el html, pero en el lado del cliente, el navegador decidirá que el contenido proveniente de otro dominio no debería ser accesible, por lo tanto, falla.

Si hay un iframe en evil.com para bank.com/send_money, el iframe cargará todo el html muy bien, pero nuevamente el navegador decidirá que javascript no puede usar este html y solo se puede ver en iframe Por lo tanto, JS no puede obtener el token y no puede realizar una solicitud POST.

¿Es correcto? ¿Puede ser engañado?

    
pregunta user3702861 27.06.2014 - 12:54
fuente

1 respuesta

10

JavaScript no puede leer el contenido de otros sitios debido a la política del mismo origen .

Este es uno de los principios más fundamentales de la seguridad web y va más allá de la protección CSRF. Sin la política del mismo origen, cualquier sitio web podría leer nuestros correos electrónicos a través de nuestro webmailer, echar un vistazo a nuestra cuenta de PayPal, obtener nuestra información privada de Facebook, etc. Por lo tanto, los proveedores de navegadores ponen mucho esfuerzo en prevenir esto.

Al igual que con todos los mecanismos de seguridad, puede haber errores. Y también hay un ataque específico llamado reencuadernación de DNS . Pero en general, la política del mismo origen funciona muy bien y no puede ser derrotada fácilmente.

    
respondido por el Fleche 27.06.2014 - 13:44
fuente

Lea otras preguntas en las etiquetas