GWT 和 XSRF 保护

Posted

技术标签:

【中文标题】GWT 和 XSRF 保护【英文标题】:GWT & XSRF Protection 【发布时间】:2011-09-09 15:43:18 【问题描述】:

我正在寻找可能的解决方案来保护我的 GWT 应用免受 XSRF 攻击。

如果我对 GWT's solution 的理解正确 - 它提供了一个 Servlet,您可以使用它在客户端(调用 RPC 端点时)生成令牌并在服务器端验证(当调用到达您的服务)。

此解决方案是否仅适用于 RPC 调用?我们肯定需要它来覆盖所有用户生成的对服务器的请求吗?

还有其他推荐的 XSRF 解决方案(我也在关注OWASP's CSRFGuard)?

【问题讨论】:

除了 GWT RPC,您还使用了哪些类型的用户生成请求? 我们有一些 servlet、一个 Jack Rabbit 存储库等,用户可以生成请求。 【参考方案1】:

我修改了 GWT 示例应用程序以防止 XSRF。该解决方案大致基于 GWT 开发人员文档中提供的解决方案。 http://code.google.com/p/xsrf-safe/

【讨论】:

我看了你的解决方案,我在徘徊,你在哪里创建和处理客户端的cookie?因为我不使用google-apps,我如何使用cookie JSESSIONID,它没有值,你在哪里设置cookie的值,你如何处理cookie......你能解释一下吗,或者给我一个链接? tnx "JSESSIONID cookie 在创建会话时创建/发送。会话在您的代码第一次调用 request.getSession() 或 request.getSession(true) 时创建。" -***.com/questions/595872/… 在示例中 request.getSession() 在 Xsrf_Safe.jsp 中被调用 code.google.com/p/xsrf-safe/source/browse/trunk/war/… 所以你实际上是把会话值作为一个 javascript 变量,"xsrf" : %=XsrfTokenUtil.getToken(request.getSession().getId())%>" 但是你在哪里调用 Cookie .create()... 你怎么已经生成了 cookie.. 这是否遵循使用 google-apps-engine 和启用的会话?因为我的代码需要显式地创建具有给定名称的 cookie JSESSIONID cookie 是由服务器在使用会话时自动创建的。它不是 App Engine 特定的,它是 JSP 的一部分。 GWT 客户端不直接使用 cookie,cookie 只是维护会话。 JSP 使用会话 id 生成安全令牌,并将令牌作为 javascript 变量注入。客户端只需读取 javascript 变量并将其传递回每个 GWT-RPC 请求的 HTTP 标头中。然后服务器验证来自标头的令牌。你想完成什么?

以上是关于GWT 和 XSRF 保护的主要内容,如果未能解决你的问题,请参考以下文章

使用 X-XSRF-TOKEN(如 angularjs)标头确保 CSRF 保护

Confluence 6 配置 XSRF 保护

在 AppEngine 上保护 GWT 应用程序

GWT:XSRF:零星缺少 X-GWT-Permutation 标头

登录期间的会话处理,并在 GWT 中防止 XSRF(跨站点请求伪造)

如何保护我的 JsonResult GET 调用?