如何保护来自多个域的ajax请求?

时间:2015-06-25 12:10:03

标签: javascript php security

我想只接受限制域请求,例如我想接受来自www.abc.com和www.xyz.com的所有请求,所有其他请求都应该被拒绝。我不能在服务器端使用令牌进程,因为多个域使用我的javascript代码所以在这里我们无法想到服务器端令牌和HTTP_ADDR可以从javascript操作。请建议如何验证它是否可靠?

2 个答案:

答案 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或跨域资源请求。