2009-05-23 17 views
7

Actualmente estamos desarrollando una aplicación totalmente basada en AJAX que interactuará con el servidor a través de una API RESTful. He considerado posibles esquemas para proteger contra los ataques XSRF contra la API.Protección XSRF en una aplicación de estilo AJAX

  1. autentica de usuario y recibe una cookie sesión, que es también doble presentado con cada solicitud.

  2. Implementamos un consumidor de OAuth en Javascript, recupere un testigo cuando el usuario se conecta, y firmar todas las solicitudes con esa señal.

Me estoy inclinando hacia el enfoque de OAuth, principalmente porque me gustaría ofrecer tercero el acceso a nuestra API y yo prefiero no tener que poner en práctica dos esquemas de autenticación.

¿Hay alguna razón por la que un consumidor de OAuth no funcione en esta situación?

Respuesta

0

La forma más fácil de evitar XSRF es verificar el referer de cada solicitud RESTful para asegurarse de que la solicitud proviene del mismo dominio. La cookie de sesión es importante para mantener el estado, pero no defenderá contra XSRF porque también se enviará con una solicitud falsificada. Es común ver un sistema de protección XSRF basado en referencia en hardware de red integrado con requisitos de memoria limitados, Motorola usa este método en la mayoría de su hardware. Esta no es la protección XSRF más segura, la protección basada en tokens es mejor, pero ambos sistemas aún se pueden pasar por alto con XSS. El mayor problema con la protección XSRF basada en token es que se necesita mucho tiempo para volver atrás y solucionar cada solicitud y es probable que se pierda algunas solicitudes.

Asegúrese de leer en same origin policy y scan your site for xss. También debe leer el Top 10 de OWASP para 2010 A3-Broken Authentication and Session Management.

4

La mayoría de las bibliotecas AJAX establecerán un encabezado adicional "X-Requerido-Con: XMLHttpRequest", que es difícil de falsificar en un ataque XSRF básico (aunque es posible si se combina con XSS). Verificar que este encabezado existe es una buena estrategia de defensa en profundidad si espera que todas sus solicitudes sean AJAX.

1

Utilice una solicitud de dos pasos, el primero preguntando por el servidor un token impredecible, el segundo preguntando por la acción real con el token.

Como el atacante no puede predecir el token y no puede leerlo (la misma política de origen), no puede dar un token válido en la segunda consulta.

Pero hay que tener cuidado de no gotear fichas (aprender acerca de la captura utilizando JSON cuando afectan el valor de una variable global y así sucesivamente) y leer:

http://www.google.com/search?q=xsrf+defence

Cuestiones relacionadas