0

我正在将 CSRF 预防机制添加到我的应用程序中。我浏览了很多帖子,但我的方法仍然存在不确定性。我打算同时使用同步令牌实现,我想用它来防止重复提交、返回按钮和刷新。所以我需要一个新的令牌来处理每个请求。目前在我的应用程序中,有常规的表单提交、url GET 和 AJAX 请求。实际上有一些新窗口弹出窗口,但我正在尝试消除/重写这些功能。这是我打算做的事情以及一些不确定性。

以下是一些初步假设:

  1. 在正常情况下,不会有两个函数同时从一个用户向服务器发送请求
  2. 阻止了所有 XSS
  3. 无法使用 JavaScript 访问 cookie
  4. 使用 HTTPS

我的流程和疑问:

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

我的方法是否存在“独立”问题?

谢谢

4

1 回答 1

0

1 和 2: CSRF 令牌通过网络传输时的安全性唯一重要的是HTTPS VS HTTP。如果它只是 http 有人可以拦截通信和您的 CSRF 令牌。

除此之外,它正在传输相同的数据。如果它在标头中或在 JSON 或 HTML 中,则没有区别。只需确保令牌通过 HTTPS 进行通信。使用 HTTPS,甚至标头也被加密

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

3. AJAX 来处理 CSRF 令牌不是一个好主意。攻击者可以使用 ajax 调用作为攻击媒介相反,如果您真的不希望攻击者在信用卡交易等 CSRF 上进行某些事情,最好让用户再次登录。

于 2013-08-13T09:32:58.817 回答