使用CORS时防止CSRF?

时间:2012-08-14 06:49:03

标签: security csrf cors

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

1 个答案:

答案 0 :(得分:1)

理论上,可能有一个解决方案。

  1. 在每个用户的书签中嵌入一个唯一的CSRF令牌。
  2. 将书签中的代码包装在匿名函数中,这样页面就无法访问它。
  3. 在您的书架中嵌入a strong hash function。这必须完全放在书签的代码中,以确保它不会被篡改。
  4. 在XMLHttpRequest中,您发送:
    1. 消息
    2. 哈希:
      1. 消息
      2. 您的CSRF令牌
      3. 独特的长盐
      4. 用户标识
      5. 时间戳(仅用于确保消息是现在发送而不是在其他时间发送)
    3. 时间戳
    4. 用户标识
  5. 在您的服务器上,您验证:
    1. 时间戳在允许的误差范围内(这是必要的,因为用户的计算机时钟可能已关闭)
    2. 哈希是正确的
  6. 如果一切正确,您可以发布消息。
  7. 这个概念存在一个缺陷:如果网站篡改了书签使用的任何功能(例如Array()),恶意网站仍然可以拦截,复制和/或修改message,userID或CSRF令牌。