【问题标题】:CSRF using synchronized token implementation detail adviceCSRF 使用同步令牌实现细节建议
【发布时间】:2013-08-14 19:44:45
【问题描述】:

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

以下是一些初步假设:

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

我的心流和疑惑:

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

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

谢谢

【问题讨论】:

    标签: http csrf


    【解决方案1】:

    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 上进行攻击,最好让用户登录再次进入。

    【讨论】:

    • 好的,我现在对第 1 点和第 2 点充满信心。我对第 3 点的意思是,我想将我的令牌放在一个 JavaScript 变量上,并使用我所做的每个 AJAX 调用对其进行更新,而不是使用 AJAX 显式处理令牌。我想将令牌作为 JS 变量并将其置于隐藏输入中是一回事,对吧?
    猜你喜欢
    • 1970-01-01
    • 2014-01-23
    • 2011-09-25
    • 1970-01-01
    • 2012-01-13
    • 2017-01-15
    • 2012-07-08
    • 2012-05-29
    • 2018-03-19
    相关资源
    最近更新 更多