GWT - 处理XSRF / CSRF

时间:2011-05-25 08:28:44

标签: gwt rpc csrf

我是否正确,如果我为每个RPC请求传递自生成的sessionID,并且只检查此会话ID而不是cookie头中传递的会话ID,则会话不会被恶意网站劫持?我知道您还应该在cookie中发送此sessionID,然后将其与每次检测XSRF攻击请求时发送的会话ID进行比较,但按照我的方式进行,至少应该防范XSRF攻击,不是吗?

修改

我知道GWT 2.3通过提供XSRF令牌支持来处理XSRF。可悲的是,我坚持使用GWT 2.2,所以必须自己处理它。

2 个答案:

答案 0 :(得分:3)

是的,因为浏览器没有足够的信息来说服您的应用程序它具有正确的凭据。在传统的XSRF攻击中,浏览器机制本身正在被利用,如果它不知道如何发送额外信息或发送什么信息,那么它就无法工作。

然而,通过这种方法,我会发现恶意攻击者仍然可能会破坏您自己生成的sessionID,并在他们找到机制后立即使用它。

有关更多提示,请参阅this wiki page on cryptographic nonce。在使用nonce时,你正在创建一些只能用于那个时刻的东西。一旦时刻过去,数据就会变得无用(就用时间盐渍的密码而言)或服务器不会接受。这传统上用于防止重放攻击,因为如果你原谅我,nonce已经过去了。

答案 1 :(得分:1)

您可能需要查看OWASP's CSRF Guard Project。他们使用过滤器检查服务器的每个请求以获取所需的CRSF令牌。这是可配置的 - 您可以指定防御的各个方面,例如:

  • 不需要保护的网址
  • CRSF令牌的入口点表单 将被生成(登录时)
  • 可能发生攻击时的行为 拾取(重定向,记录)等

它实际上是一种解决方案,无需更改代码,其中最新版本也支持对服务器的AJAX(RPC)调用。所以我相信这绝对是一个尝试的选择(我目前正在为一个相当大的GWT应用程序POCing这个解决方案)。

最后我相信你已经建立了对XSS的防御。如果可以使用XSS,则XSRF防御可以无效(更不用说通常通过XSS启动XSRF攻击)。