有没有办法来validation一个Ajax请求是从一个给定的域名?

我打开(也是欢迎)替代我将要问的东西,而且对重新发明车轮不感兴趣,所以如果有更好的方法,我很想知道它。

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

鉴于基于浏览器的Ajax调用是全世界都可以看到的,我试图想出一些scheme,把这个密钥公开给恶意用户不会破坏安全性。

因此,我想将令牌与托pipe站点的域相结合,以保证请求是由授权用户进行的。

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

你不能可靠地知道传入的ajax呼叫来自哪里。 请记住,当它来自浏览器,它来自个人用户的计算机,而不是从任何特定的域。 另外,任何非浏览器客户端也可以进行ajax调用并发送任何想要的头文件。

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

如果你只是想让自己的代码做这些Ajax调用,那么需要一些工作来给你一些威慑的东西。 我见过的一种方法是,在每个网页上放置一个经常变化的标记。 你用每个ajax调用发送这个标记,你的服务器validation这个特定时间段是否是合法的标记。 令牌必须到期,所以stream氓客户不能只收获一个令牌并永久使用它。 这不是万无一失的,因为有人可以试图用刮刀来定期收集新的代币,但是大多数人会发现比它的价值更麻烦。