【问题标题】:Is there a way to verify that an ajax request was made from a given domain?有没有办法验证 ajax 请求是从给定域发出的?
【发布时间】:2015-02-23 22:35:24
【问题描述】:

我对我将要问的问题持开放态度(并欢迎)替代方案 - 并且对重新发明轮子不感兴趣,所以如果有更好的方法,我很想知道。

我希望在基于浏览器的 AJAX API 调用中添加一个身份验证令牌。 API 是用 Node.js 编写的。

鉴于基于浏览器的 ajax 调用对全世界都是可见的,我正在尝试提出一些方案,使该密钥暴露给恶意用户不会破坏安全性。

因此,我想将令牌与托管站点的域结合起来,以确保请求是由授权用户发出的。

我担心的是无法保证这一点。我想知道是否可以以某种方式欺骗传入的 AJAX 标头,使其看起来像是来自 abc.com,而实际上它是来自angerous-north-korean-hackerz.net。

【问题讨论】:

  • authorized user 是授权域的网站所有者还是在您的域中拥有帐户的最终用户?所需的安全模型非常不同,具体取决于访问令牌是客户端(即最终用户的 cookie 可以附加到请求)还是在授权域的服务器上生成。

标签: ajax node.js security http-headers


【解决方案1】:

您无法可靠地判断传入的 ajax 调用来自何处。请记住,当它来自浏览器时,它来自单个用户的计算机,而不是来自任何特定域。此外,任何非浏览器客户端也可以进行 ajax 调用并发送它想要的任何标头。

从另一个浏览器中,只要您的服务器不启用跨站点访问,作为同源保护的一部分,浏览器将不允许其他网站联系您的 ajax 服务器,但这并不是从非浏览器客户端。

如果您只希望自己的代码进行这些 ajax 调用,那么需要一些工作才能为您提供一些可以起到威慑作用的东西。我见过的一种方法是在每个网页中放置一个定期更改的令牌。您在每个 ajax 调用中发送该令牌,您的服务器会验证这是否是该特定时间段内的合法令牌。令牌必须过期,因此流氓客户端不能只获取一个令牌并永远使用它。这并不是万无一失的,因为有人可以尝试用刮刀定期收集新令牌,但大多数人会发现这比它的价值更麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2019-08-16
    • 2015-05-06
    • 2019-06-07
    • 2011-04-14
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多