2012-08-14 178 views
5

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

+0

不,也许你可以考虑发布到你的网站控制下的iframe,然后让用户在发布之前确认()。或者你可以在每个用户的小书签中嵌入一个独特的CSRF标记,然后......等等,我正在想一个主意...... – user2428118 2012-10-02 10:54:16

回答

1

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

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

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