5

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

4

1 回答 1

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 令牌。

于 2012-10-02T11:20:44.860 回答