我正在制作一个书签,以便用户可以使用来自任何页面的 CORS 跨域发布到我的服务器。用户必须在发布和使用 cookie 之前进行身份验证。有什么方法可以防止恶意网站在他们的网页中嵌入 javascript 代码以使用用户的凭据跨域发布到我的服务器?
问问题
738 次
1 回答
1
理论上,可能有解决方案。
- 在每个用户的书签中嵌入一个唯一的 CSRF 令牌。
- 将小书签中的代码包装在一个匿名函数中,这样页面就无法访问它。
- 在您的书签中嵌入强大的哈希函数。这必须完全放在小书签的代码中,以确保它不会被篡改。
- 在您的 XMLHttpRequest 中,您发送:
- 讯息
- 哈希值:
- 讯息
- 你的 CSRF 令牌
- 独特的长盐
- 用户 ID
- 时间戳(只是为了确保消息是现在发送的,而不是在其他时间发送)
- 盐
- 时间戳
- 用户 ID
- 在您的服务器上,您验证:
- 时间戳在允许的误差范围内(这是必要的,因为用户的计算机时钟可能已关闭)
- 哈希是正确的
- 如果一切正确,您可以发布消息。
这个概念有一个缺陷:如果网站篡改了书签使用的任何功能(例如Array()
),恶意网站仍然可以拦截、复制和/或修改消息、用户 ID 或 CSRF 令牌。
于 2012-10-02T11:20:44.860 回答