2011-01-18 18 views
10

¿Cómo se puede proteger contra los ataques XSRF en Grails? Veo que los formularios apoyan la noción de useToken que (creo que debería ser suficiente). Sin embargo, remoteForm u otra solicitud relacionada con AJAX no son compatibles con esta característica.¿Cómo se protege contra XSRF en Grails?

Además, ¿hay alguna manera de invertir la funcionalidad de useToken para que siempre se use en lugar de habilitarse caso por caso?

+0

Sé que [verificar el encabezado HTTP Referer no es suficiente] (http://www.secureworks.com/research/blog/research/21009/), pero es un comienzo mejor que nada, especialmente si no No permita referencias negativas. Y esto es bastante fácil de agregar como filtro. – OverZealous

Respuesta

2

Puede intentar buscar el código fuente de la etiqueta <g:form>. Utiliza un SynchronizerToken para crear un token y almacenarlo en la sesión. Basado en la resolución de this issue, debería ser posible usar el mismo token para todos los formularios en la misma página. No probé esto, pero teóricamente solo necesitarías crear manualmente un campo oculto en el formulario y generar el token en ese campo.

0

Hemos inyectado un valor oculto al objeto de solicitud en un filtro anterior y encriptamos el valor con una clave específica. Luego, inyectamos ese valor request.token a cada formulario en el sitio y cuando recibimos un POST tenemos un filtro before para verificar que ese campo oculto esté presente y su misma clave secreta pueda decodificar su valor.

Si ese valor oculto no está presente o si está desactualizado, utilizamos una marca de tiempo como carga útil, le damos al cliente un estado de error.

Esta es una forma alternativa a la descrita anteriormente y la utilizamos porque no utilizamos sesiones en nuestros sitios para facilitar el equilibrio de carga.

Cuestiones relacionadas