使用CORS时防止CSRF?

coo*_*ler 5 security csrf cors

我正在制作一个书签,以便用户可以从任何页面使用CORS跨域发布到我的服务器.用户必须在发布和使用cookie之前进行身份验证.有没有办法防止恶意网站在他们的网页中嵌入javascript代码,使用用户的凭证进行跨域发布到我的服务器?

use*_*118 1

理论上,这个问题可能有解决方案。

  1. 在每个用户的书签中嵌入唯一的 CSRF 令牌。
  2. 将书签中的代码包装在匿名函数中,以便页面无法访问它。
  3. 在您的小书签中嵌入强大的哈希函数。这必须完全放置在小书签的代码中,以确保它不会被篡改。
  4. 在您的 XMLHttpRequest 中,您发送:
    1. 消息
    2. 的哈希值:
      1. 消息
      2. 您的 CSRF 令牌
      3. 独特的长盐
      4. 用户ID
      5. 时间戳(只是为了确保消息是现在发送的,而不是在其他时间发送的)
    3. 时间戳
    4. 一个用户ID
  5. 在您的服务器上,您验证:
    1. 时间戳在允许的误差范围内(这是必要的,因为用户的计算机时钟可能关闭)
    2. 哈希值是正确的
  6. 如果一切正确,您可以发布消息。

这一概念有一个缺陷:如果网站篡改小书签使用的任何功能(例如Array()),恶意网站仍可能能够拦截、复制和/或修改消息、用户 ID 或 CSRF 令牌。