我想只接受限制域请求,例如我想接受来自www.abc.com和www.xyz.com的所有请求,所有其他请求都应该被拒绝。我不能在服务器端使用令牌进程,因为多个域使用我的javascript代码所以在这里我们无法想到服务器端令牌和HTTP_ADDR可以从javascript操作。请建议如何验证它是否可靠?
答案 0 :(得分:6)
XMLHttpRequest会将an Origin
header插入到请求中,该请求会告诉您该请求来自的网站。
用它来填充the Access-Control-Allow-Origin
header。
(显然,这不能防止非Ajax请求)。
答案 1 :(得分:0)
您似乎正在尝试阻止Cross Site Request Forgery (CSRF)而不是阻止actor为您的网站创建任意cURL请求以便检索数据。为此,我建议采用以下方法。
对于"safe" methods,您可以检查Origin
标头是否与白名单匹配,如果是,则输出Access-Control-Allow-Origin
标头以匹配。这是CORS的实现。
对于“不安全”方法,您可以设置并检查标题,例如X-Requested-With
。使用Origin
来保护不安全的方法更加困难,因为旧浏览器不会发送标头,而某些新浏览器不会发送相同原始请求的标头。
上述方法仅适用于AJAX,不适用于普通表单GET或POST或跨域资源请求。