如果有人将他们的域指向我的服务器,“Access-Control-Allow-Origin”会帮助我吗?

Posted

技术标签:

【中文标题】如果有人将他们的域指向我的服务器,“Access-Control-Allow-Origin”会帮助我吗?【英文标题】:Does "Access-Control-Allow-Origin" help me against if someone points their domain to my server? 【发布时间】:2017-03-13 11:27:16 【问题描述】:

也许我误解了如何在我的服务器中完全实现 CORS。

鉴于此通过 Chrome 完成的请求的屏幕截图。

我们可以看到我们正在访问站点 shakh.photography,请求 URL 是针对 /api/get-videos/ 的 POST ajax 请求,但响应包含一个 Access-Control-Allow-Origin 标头,其中提到了一个完全不同的域。

即使网络服务器使用Access-Control-Allow-Origin 标头响应,浏览器也会忽略它。一切仍然有效。

我认为仅设置 Access-Control-Allow-Origin 就足以只允许来自指定来源的请求。

我错过了什么?

在修复之前,这种情况可以通过访问 shakh.photography 进行测试。

【问题讨论】:

【参考方案1】:

同源策略仅阻止站点读取跨源 Ajax 响应。这可以防止攻击站点使用用户的 cookie 来使用用户的权限从您的站点获取数据。

CORS 允许您选择性地弱化同源策略,而不是用来加强它。

我们可以看到我们正在访问网站 shakh.photography, 请求 URL 是对 /api/get-videos/ 的 POST ajax 请求,但 响应包含一个 Access-Control-Allow-Origin 标头,其中提到了 完全不同的域。

即使网络服务器使用 Access-Control-Allow-Origin 响应 标头,浏览器会忽略它。一切仍然有效。

是的。这个是正常的。该请求是从站点 A 到站点 A。站点 A 无法使用用户可能对站点 B 拥有的任何 cookie 或其他凭据(浏览器将它们相互沙箱化)。您只需拥有一个服务器,它使用相同的数据响应两个 URL。

第三方可以这样做,但他们不能只为您的 API 这样做(通过代理除外,这是一个不同的问题,安全隐患更少)。他们必须让整个站点在另一个主机名下可用,这不应该引起任何安全问题。

如果您不希望这样,请配置您的服务器,使其使用虚拟名称托管并根据请求中的 Host 标头提供不同的内容集。

【讨论】:

【参考方案2】:

请求将来自同源,即 shakh.photography/api/.. 因此没有发送 OPTIONS 预检。

如果请求是从第三方网页发送的,比如third.party,那么浏览器会发送OPTIONS,服务器会检查其原始策略并返回error,因为目前只允许gamezelle.com。 如果它是从gamezelle.com 发送的,则响应将为OK,然后浏览器将发送后续请求。

【讨论】:

嗯,好的。我仍然想禁止 shakh.protography 从服务器发送/请求东西。 始终允许相同的来源,您可以检查来源并返回 false 我猜。 允许同源是什么意思?您的意思是如果有人将自己的域重定向到我的网络服务器,CORS 标头不会阻止? same origin 表示请求由 http://a 发送到 http://a/b/c。对于要应用的同源策略,协议主机名和端口号应该匹配。在你的情况下 shakh.photo 被允许访问 shakh.photo/api/.. 通过重定向本质上您的网站将被提供,因此不再跨域

以上是关于如果有人将他们的域指向我的服务器,“Access-Control-Allow-Origin”会帮助我吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 Amazon 的 CloudFront 指向 A 记录而不是 CNAME

如何将 DigitalOcean 中的域指向 Route 53?

将 Route53 的域指向 VULTR 的主机

有没有办法使用名称服务器将我的域与 heroku 连接起来

具有自定义用户域的 SSL

域客户端访问总是指向其他的域控制器