Inconvenientes de seguridad para usar el token de acceso de corta duración en el lado del cliente javascript

6

Tengo la intención de crear un sitio front-end completamente en javascript (NodeJS) y me gustaría hacer llamadas ajax a un REST WS que se encuentra en otro dominio en el lado del cliente.

Tengo la intención de usar auth2 y SSL para asegurar mi back-end REST, realizar el token de acceso en el servidor front-end, pero como quiero poder hacer llamadas ajax, tengo que usar el token de acceso obtenido en el cliente lado.

Mi pregunta es: ¿cuáles son los peligros de usar un token de acceso de corta duración en el lado del cliente para realizar llamadas ajax entre dominios? ¿No es tan seguro como usar cookies? Sé que pasar por un proxy debería ser más seguro, pero ¿realmente vale la pena?

Muchas gracias.

    
pregunta rico 09.04.2012 - 23:45
fuente

2 respuestas

4

Con cualquier API a través de HTTP, debe preocuparse por los ataques de falsificación de solicitudes entre sitios. JSON + REST CSRF es posible . Esto no tiene en cuenta JSONP o CORS porque la solicitud no se realiza con un XHR.

La habilitación de CORS causa enormes problemas al tratar de proteger su API. CORS, en efecto, revoca sus derechos para proteger su sitio web con la Política del mismo origen, es muy similar a tener una vulnerabilidad XSS en su sitio web.

Un método realmente bueno para prevenir CSRF es incluir un token aleatorio con cada solicitud. Desafortunadamente esto no es muy bueno, pero es seguro. En algunos casos, un atacante puede obtener este token CSRF al abusar de JSON ( enlace ), y hay maneras de prevenir esto . Si está sirviendo este token con una API REST habilitada para CORS, entonces no hay manera de evitar que un atacante obtenga este token, y ahí no puede evitar el CSRF.

    
respondido por el Mikey 10.04.2012 - 00:30
fuente
3

Si entiendo su pregunta, su enfoque propuesto está bien, siempre y cuando todas las conexiones estén sobre HTTPS. No hay nada de malo en incluir un token de acceso de corta duración en la solicitud para demostrar que la solicitud es parte de una sesión autenticada. Básicamente, es un uso isomórfico de una cookie de sesión para demostrar que una solicitud es parte de una sesión establecida.

Hay algunas precauciones que debes tener en cuenta. Solo debe adjuntar el token de acceso a las solicitudes que haya construido completamente por su cuenta; De lo contrario, los ataques CSRF son posibles. Si está utilizando un cliente web, la inclusión del token de acceso en los parámetros de la URL no es lo ideal: los parámetros de la URL a menudo se registran en el lado del servidor y pueden revelarse en el encabezado Referer . Es mejor enviar el token de acceso en un parámetro de forma oculta incluido en los datos POST. (Las cookies evitan estos problemas, porque no se envían en el parámetro de URL, aunque presentan sus propios riesgos, especialmente CSRF).

    
respondido por el D.W. 10.04.2012 - 21:59
fuente

Lea otras preguntas en las etiquetas