CSRF使用同步令牌实现详细建议

时间:2013-08-13 09:06:12

标签: http csrf

我正在为我的应用程序添加CSRF预防机制。我查看过很多帖子,但我的方法仍然存在不确定性。 我将使用同步令牌实现,同时我想使用它来防止双重提交,后退按钮和刷新。所以我需要为每个请求添加一个新令牌。 目前在我的应用程序中,有常规表单提交,URL GET和AJAX请求。实际上有一些新窗口弹出窗口,但我正在尝试消除/重写这些功能。 以下是我计划要做的事情以及一些不确定因素。

以下是一些初步假设:

  1. 在正常情况下,没有两个函数会同时从一个用户向服务器发送请求
  2. 阻止了所有XSS
  3. 无法使用JavaScript访问Cookie
  4. 使用HTTPS
  5. 我的流量和怀疑:

    1. 令牌将生成并存储在会话中,然后与生成的HTML或JSON数据一起传递。通过标头传输的值是否与在HTML或JSON中插入它一样安全?
    2. 每个请求都会携带此令牌以与会话中存储的值进行匹配。会通过标题传递这个值是否有问题?
    3. 为了最大限度地减少程序员的工作,我想提供统一的JavaScript函数来提交表单并进行AJAX调用,这样我就可以透明地在请求中添加令牌。因此,我计划将令牌放在一个JavaScript变量中,所有JavaScript程序都可以访问它。这样做有风险吗?
    4. 我的方法是否有“自足”问题?

      由于

1 个答案:

答案 0 :(得分:0)

1& 2:只有在CSRF令牌通过网络传输时的安全性才是 HTTPS VS HTTP 。如果它只是http某人可以拦截通信和你的CSRF令牌。

除此之外,其传输的数据相同。如果它在标题中或JSON或HTML内部没有区别。只需确保令牌通过HTTPS进行通信。 With HTTPS, even the headers are encrypted

如果它是没有SSL的HTTP,无论如何,无论是在标题中还是在HTML中,中间人攻击都会找到它。

3。 AJAX处理CSRF令牌并不是一个好主意。 An attacker can use the ajax call as an attack vector 相反,如果您真的不希望攻击者进入CSRF等信用卡交易,那么最好是让用户再次登录。