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

Session 登录期间的会话处理,在GWT中防止XSRF(跨站点请求伪造),session,gwt,login,csrf,Session,Gwt,Login,Csrf,我已经实现了一个简单的GWT应用程序,它具有一个登录服务(LoginService)和一个工作者服务(WorkerService)。这两个GWT-RPC。通过实现GWT最新的XsrfProtectedServiceServlet(请参阅),我已经针对XSRF保护了所有服务 在实现这个示例时,会话id在JSP文件中创建,就在加载页面时。在这种情况下,即使用户没有登录 这是正确的方法吗?或者我必须在LoginService中创建会话id(设置cookie)?但是当以这种方式实现它时,LoginSer

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

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

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

谢谢,
Pascal首先,简要回顾一下XSRF:

  • 用户浏览some-attacker.com/evil.html
  • 例如,evil.html包含一个带有URL“www.your-nice-site.com/doSomeAction”的
    标记(或一些提交表单帖子的JavaScript…)
  • 这将使用户的浏览器自动向站点提交GET或POST请求,并代表用户执行操作。不幸的是,用于www.your-nice-site.com的用户cookie也会随请求一起自动发送,因此(问题就在这里)如果用户登录,请求将以用户完全授权的身份到达您的服务器(即,如果您的服务器不需要额外的反XSRF令牌)
现在很容易看出,XSRF不能用于攻击登录服务本身,因为此时,用户尚未获得授权-攻击者必须知道用户的凭据才能执行登录。(如果用户已登录,则调用登录服务不应执行任何操作![*])

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


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


如果必须这样做,则始终将响应包装在JavaScript注释中(
/***/
),如中所述。或者更好:在响应前加上
while(1),如中所述。无论如何,这是一种很好的做法。

登录XSRF是无害的说法并不完全正确。假设应用程序易受self-XSS攻击:您可以注入脚本,但它们只反映给您的用户。让我们使用以下设置:创建一个加载应用程序的iframe,显示一些敏感数据(使用攻击者的瞬时身份验证)。等等。执行XSRF将目标登录到一个准备好的帐户,并在网页的原始位置运行脚本,从另一个框架中读取敏感数据。@Niklas:如果可以在不发送XSRF令牌的情况下显示敏感信息,则这是真的。有些人犯了以下错误:他们只保护那些可以改变服务器上某些内容的调用。这实际上基本上是可以的,但出于您提到的原因,以及我在答案底部提到的原因,最好也保护检索敏感数据的呼叫。