有没有一种方法可以验证ajax请求是从给定的域发出的



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

我的愿望是向基于浏览器的AJAX API调用添加一个auth令牌。API是用Node.js.编写的

考虑到基于浏览器的ajax调用对全世界都是可见的,我正试图想出一些方案,在这种方案中,将此密钥暴露给恶意用户不会破坏安全性。

因此,我想将令牌与网站所在的域相结合,以确保请求是由授权用户发出的。

我担心的是没有办法保证这一点。我想知道传入的AJAX头是否可以被欺骗,使其看起来像是来自abc.com的调用,而实际上它是从angry-north-korean-hackerz.net.

发出的

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

从另一个浏览器,只要你的服务器不允许跨站点访问,浏览器就不允许其他网站联系你的ajax服务器,作为其同源保护的一部分,但这不是从非浏览器客户端强制执行的。

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

相关内容

  • 没有找到相关文章

最新更新