如何解决在登录期间进行会话处理,并防止GWT中的XSRF跨站点请求伪造
我已经实现了一个简单的GWT应用程序,该应用程序具有登录服务(LoginService)和工作程序服务(WorkerService)。两者都是GWT-RPC。通过实现GWT的最新XsrfProtectedServiceServlet,我已保护所有服务免受XSRF的侵害(请参阅GWT Xsrf-Safe Sample Projetct)。 实现此示例时,在页面加载时即在JSP文件中创建会话ID。在这种情况下,即使用户未登录也是如此。 这是正确的方法吗?还是我必须在LoginService中创建会话ID(设置cookie)?但是,当以这种方式实现它时,LoginService本身是否容易受到XSRF攻击? 谢谢, 帕斯卡解决方法
首先,简要回顾一下XSRF:
用户浏览至some-attacker.com/evil.html
evil.html包含例如网址为“ www.your-nice-site.com/doSomeAction \”的
<img>
标记(或一些提交POST形式的JavaScript,...)
这使用户的浏览器自动向您的站点提交GET或POST请求,并代表用户执行操作。不幸的是,用户的www.your-nice-site.com的cookie也会随请求一起自动发送,因此(这是问题所在)如果用户登录,则该请求将得到的完全授权服务器上的用户(也就是说,如果服务器不需要其他的反XSRF令牌)。
现在很容易看出,不能使用XSRF来攻击登录服务本身,因为在这一点上,用户尚未获得授权-攻击者必须知道用户的凭据执行登录。 (如果用户已经登录,则调用登录服务应该什么都不做![*])
注意:当然,攻击者可能会采用其他技术来对用户的凭据进行攻击,最著名的是:网络钓鱼。反XSRF措施不能保护您免受此侵害。
[*]如果您的服务无法使用反XSRF令牌进行保护(例如登录服务),则尤其要确保它们不返回包含任何有价值信息的有效JSON / JavaScript!
如果绝对需要,请务必按照http://code.google.com/webtoolkit/articles/security_for_gwt_applications.html#json中的说明将响应包装在JavaScript注释(/* */
)中。甚至更好:在响应前面加上while(1);
,如为什么有“ while(1);”中所述。在XmlHttpRequest响应中?无论如何,这是一个好习惯。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。