¿Es más seguro almacenar el valor XSRF dentro de su JavaScript?

3

Para protegerse contra XSRF, necesita tener un token separado en una página.

Ver: Codificación del horror: Prevención de ataques CSRF y XSRF, por Jeff Atwood

Como sugiere la publicación, es mejor tener esos tokens en un campo oculto dentro de tu formulario. Pero me pregunto, ¿si hay algún beneficio en almacenarlos en una función anónima, de modo que el valor se agregue en el envío?

Si bien puedo ver una vulnerabilidad contra XSS en el enfoque habitual, no debería haber manera de enviar un formulario válido en el mío. Si alguien controla el DOM con XSS, los tokens dentro de los campos ocultos se revelan fácilmente, a menos que sea una variable javascript inaccesible.

    
pregunta becon999 18.05.2013 - 08:08
fuente

2 respuestas

1

El problema con esta implantación es que el token CSRF no está realmente almacenado dentro de una función anónima. Este token se almacenaría dentro de texto que declara una función anónima. Una carga útil XSS puede solicitar este texto al servidor utilizando un XHR, se puede leer el token CSRF y se puede usar otro XHR para enviar una solicitud falsificada arbitraria.

Relacionado: Explicación del gusano Sammy , que es un buen ejemplo de cómo se usa XSS para leer un token CSRF. Además, XSS es posible sin JavaScript . Ahora tenga en cuenta la siguiente desigualdad:

HTTP Response Splitting > XSS > CSRF > Clickjacking
    
respondido por el rook 18.05.2013 - 11:25
fuente
2

La única vez que debe preocuparse por la lectura del token es si hay una extensión maliciosa o si se está llevando a cabo un ataque MITM.

En ambos casos, ya no es un problema CSRF. Ambos ataques tienen la capacidad de capturar la solicitud sobre la marcha (después de que su javascript la haya ensamblado con el token) y modificarla. Esto no es CSRF, pero sigue siendo un ataque potente. (El uso de HTTPS resuelve algo de esto, aunque debe suponer que el cliente no está instalando extensiones maliciosas)

Si hay una vulnerabilidad de XSS en algún lugar, es bastante fácil llamar a onsubmit() antes de enviar.

Así que realmente no hay ninguna seguridad adicional.

    
respondido por el Manishearth 18.05.2013 - 08:26
fuente

Lea otras preguntas en las etiquetas