使用CORS时是否防止CSRF?

问题描述 投票:5回答:1

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

security cross-domain csrf
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.