tokens CSRF en aplicaciones de una sola página (JavaScript / Angular)

1

Tengo un AngularJS SPA servido por Apache en un host web barato. Toda la comunicación con el backend es a través de llamadas REST de Ajax a un servidor en la nube costoso que ejecuta Tomcat. ¿Cómo pueden protegerse las llamadas REST de CSRF dado que el frontend y el backend están alojados en servidores diferentes?

Básicamente, el servidor Apache debe emitir tokens CSRF y el servidor Tomcat puede reconocerlos. Supongamos que están bajo el mismo dominio.

    
pregunta marting 04.12.2015 - 06:50
fuente

1 respuesta

2

Para implementar la protección CSRF, necesitas un token que es secreto en el sentido de que no puede ser calculado por un atacante. Puede usar una modificación de la patrón de token cifrado del chasis OWASP CSRF cheat .

Puede usar una clave secreta compartida entre el front-end y el back-end o una clave pública / privada, almacenando la clave pública en el front-end y la clave privada en el back-end. Luego, encripta la identificación del usuario y la marca de tiempo en el front-end para usarlo como su token CSRF y verificarlo en el back-end. En lugar del cifrado, puede firmar los datos utilizando un HMAC o un firma digital . Todas las opciones (cifrado asimétrico, cifrado simétrico, HMAC y firmas digitales) producirán las propiedades de token deseadas de ser fáciles de verificar pero efectivamente imposibles de predecir.

El documento OWASP sugiere que cifre la identificación del usuario, la marca de tiempo y un nonce, pero creo que el nonce no es necesario. Consulte esta pregunta y el comentario en página de discusión OWASP para obtener más información.

    
respondido por el Neil Smithline 04.12.2015 - 23:23
fuente

Lea otras preguntas en las etiquetas