你如何在Grails中防范XSRF?

时间:2011-01-18 13:55:59

标签: grails csrf

如何防止Grails中的XSRF攻击。我看到表单支持useToken的概念(我认为应该就够了)。但是,remoteForm或其他与AJAX相关的请求不支持此功能。

此外,有没有办法反转useToken的功能,以便始终使用它而不是根据具体情况启用?

2 个答案:

答案 0 :(得分:2)

您可以尝试查看<g:form>标记的源代码。它使用SynchronizerToken创建令牌并将其存储在会话中。根据{{​​3}}的分辨率,应该可以对同一页面上的所有表单使用相同的标记。我没试过这个,但理论上你只需要在表单上手动创建一个隐藏字段并在该字段中生成令牌。

答案 1 :(得分:0)

我们在before filter中为请求对象注入一个隐藏值,并使用特定键加密该值。然后,我们将该request.token值注入到站点上的每个表单中,当我们收到POST时,我们有一个before过滤器来验证该隐藏字段是否存在,并且其值可以由同一个密钥解码。

如果该隐藏值不存在或者它是陈旧的 - 我们使用时间戳作为有效载荷 - 我们给客户端一个错误状态。

这是上述内容的替代方法,我们使用此方法,因为我们不会在网站上使用会话来更轻松地进行负载均衡。