XSRF / CSRF安全REST呼叫的最佳实践?

时间:2014-02-23 18:01:16

标签: javascript rest gwt csrf gwtp

我希望保护我的REST调用免受XSRF攻击。我正在做的是以下内容:

  1. 用户成功登录后,服务器会将记录的cookie发送到浏览器。
  2. 在每个请求(GET,POST,DELETE)上,我将loggedIn cookie发送到服务器以及XSRF令牌(XSRF令牌作为头参数发送),这是通过使用MD5散列JSESSIONID cookie生成的,就像建议的那样here。 (JSESSIONID未发送到服务器)
  3. 服务器验证XSRF令牌是否使用MD5散列JSESSIONID cookie,并将结果与​​请求中的XSRF令牌进行比较。
  4. 如果两个值相等,则服务器处理请求。
  5. 编辑:我没有使用标准方法,因为我使用GWTP REST而不是GWT-RPC。 问题:

    这是一个好方法吗?如果我将LoggedIn Cookie发送到服务器是否重要?它会增加漏洞吗?

1 个答案:

答案 0 :(得分:3)

  

Q值。这是一个好方法吗?

dev guide州:

  

这种无状态XSRF保护实现依赖于攻击者无法访问会话cookie,因此无法生成有效的XSRF令牌。

XSRF令牌是JSESSIONID cookie的简单哈希,MD5是not recommended for password storage any longer(页面的旧版本,current version is here):

  

因此,建议不要将一般的哈希算法(例如,MD5,SHA-1/256/512)用于密码存储。

但是,由于攻击者无法检索JSESSIONID值,因此此方法只是执行OWASP推荐double submit cookies XSRF prevention method的另一种方法,并且是安全的。回答这个问题对我来说似乎是一个很好的方法。

  

Q值。如果我将LoggedIn Cookie发送到服务器是否重要?

是的,您也应该发送身份验证Cookie,以便您的API也能以正常方式授权用户。

  

Q值。它会增加漏洞吗?

发送带有请求的cookie也没有额外的风险。使用HTTPS保护您的REST服务是个好主意,这样所有数据在传输过程中都会被加密。