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

Pas*_*cal 6 session gwt login csrf

我已经实现了一个简单的GWT应用程序,它具有登录服务(LoginService)和工作服务(WorkerService).两者都是GWT-RPC.我通过实现GWT最新的XsrfProtectedServiceServlet来保护所有针对XSRF的服务(请参阅GWT Xsrf-Safe Sample Projetct).

实现此示例,会在页面加载时在JSP文件中创建会话标识.在这种情况下,即使用户没有登录.

这是正确的方法吗?或者我是否必须在LoginService中创建会话ID(设置cookie)?但是当以这种方式实现时,LoginService本身是否容易受到XSRF攻击?

谢谢,帕斯卡尔

Chr*_*her 6

首先,简要回顾一下XSRF:

  • 用户浏览some-attacker.com/evil.html
  • evil.html包含例如一个<img>标记(或一些提交表单POST的JavaScript,......),其URL为"www.your-nice-site.com/doSomeAction"
  • 这使用户的浏览器自动向您的站点提交GET或POST请求,并代表用户执行操作.不幸的是,用户的www.your-nice-site.com的cookie也随着请求自动发送,所以(这就是问题)如果用户登录,则请求在用户完全授权的情况下到达您的服务器(也就是说,如果您的服务器不需要额外的反XSRF令牌).

现在很容易看出,XSRF不能用于攻击登录服务本身,因为此时用户尚未获得授权 - 攻击者必须知道用户的凭据才能执行登录.(如果用户已经登录,则调用登录服务应该什么都不做![*])

注意:当然,攻击者可能会使用其他技术对用户的凭据执行攻击,最明显的是:网络钓鱼.反XSRF措施无法保护您免受此攻击.


[*]如果您的服务无法使用反XSRF令牌(例如登录服务)进行保护,那么尤其要确保它们不会返回包含任何有价值信息的有效 JSON/JavaScript!

如果您必须这样做,请始终将响应包装在JavaScript comments(/* */)中,如http://code.google.com/webtoolkit/articles/security_for_gwt_applications.html#json中所述.或者甚至更好:使用while(1);前面的解释,如为什么有"while(1);"中所解释的那样.在XmlHttpRequest响应?.无论如何,这是一个很好的做法.