¿Es el interceptor de tokens Struts2 una forma viable de protección contra CSRF?

3

Actualmente estoy implementando el interceptor de tokens Struts2 predeterminado en todos nuestros formularios como medida contra CSRF (haciendo que un usuario ejecute una acción en nuestro producto sin saberlo, visitando otro sitio web y activando un javascript malicioso).

Algunas especificaciones técnicas en el token: cuando se usa, crea 2 campos ocultos en el formulario: un campo llamado struts.token.name que contiene el nombre del token, y un campo con el nombre del token y un token generado aleatoriamente. Este token también se guarda en la sesión, y el nombre del token se indica en la página de configuración. Configuramos cada token de página para que tenga un nombre único basado en el nombre de la página y el ID del token, si está disponible. Esto es para que un usuario pueda tener abiertas 2 páginas de edición del mismo tipo, por ejemplo, para copiar sobre ciertos atributos de un objeto a otro.

Cuando se envía la página, se verifica si la página contiene un token del nombre indicado en la página de configuración. Si no, la página arroja un error. Si el token está presente, se verifica si el token es el mismo que el almacenado en la sesión. Si no, la página arroja un error. Si se aprueban ambas comprobaciones, la página continúa con normalidad.

Mi principal preocupación es que una página maliciosa usa Javascript para recuperar la página original, agregarla a su propia página y recuperar los campos de token relevantes para agregarlos a su propia solicitud. ¿Es esa una preocupación legítima?

    
pregunta Nzall 30.11.2016 - 13:02
fuente

1 respuesta

1

Si su aplicación tiene CORS (Intercambio de recursos de origen cruzado) habilitado, entonces sí, el código javascript que se ejecuta en la página del atacante puede hacer llamadas a su aplicación, recuperar el token y enviarlo en la próxima solicitud, lo que puede generar una falsificación de solicitudes entre sitios ( CSRF).

Sin embargo, si CORS está deshabilitado en su aplicación, es casi imposible que un atacante pueda acceder a su página y recuperar los tokens de la misma. Los ataques CSRF generalmente se realizan con la ayuda de un usuario autenticado engañándolos para que hagan clic en algún enlace que ejecute código malicioso.

El interceptor de token de Struts valida los tokens una vez y luego restablece el token en el objeto Session para que nadie más pueda usar el mismo token, lo que podría deberse a un ataque CSRF o al usuario que intenta enviar la misma solicitud nuevamente (Suma de formularios múltiples).

    
respondido por el smallarv 26.07.2017 - 01:34
fuente

Lea otras preguntas en las etiquetas