如果有人将他们的域指向我的服务器,“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