访问控制允许原点限制

时间:2013-06-11 14:48:33

标签: asp.net http-headers iis-6 cors

我已经设置了面向公众的网站,标题为Access-Control-Allow-Origin:*,以便我们可以使用JSON和AJAX。但是,我真正想要做的是将其限制为仅限于某些服务器。请求应该只来自我们控制的几台服务器。我无法在不添加代码的情况下找到有用的东西(例如伪代码):

for each domain in myDomains
    addheader Access-Control-Allow-Origin: domain
next

是否可以在HTTP标头选项卡下的IIS中添加多个“Access-Control-Allow-Origin”?我知道可以将它实际添加到IIS,但是它有用吗?

实施例

Access-Control-Allow-Origin: http://domain1
Access-Control-Allow-Origin: http://domain2
Access-Control-Allow-Origin: http://127.0.0.1 (use using home as IP example)

使用 Access-Control-Allow-Origin:* 只是为了不安全。

1 个答案:

答案 0 :(得分:9)

不,不允许使用多个Access-Control-Allow-Origin标头。您只能有一个Access-Control-Allow-Origin响应标头,并且该标头只能有一个原始值或*(例如,您不能有多个以空格分隔的原点)。

您最好的选择是读取传入的Origin标头,针对白名单检查其值,如果允许Origin,则仅发出Access-Control-Allow-Origin标头。这是伪代码中的一个例子:

origin = request.getHeader('Origin');
for each domain in myDomains
  if (domain == origin)
    // Add header if the origin is whitelisted
    addheader Access-Control-Allow-Origin: domain
    return
// Otherwise exit the for loop without adding any headers.