假设我有一个HTML页面,来自example.com。它向targetServer.com发出javascript ajax请求
哪个服务器需要返回Access-Control-Allow-Origin =“(某事)”?
是targetServer还是提供原始HTML页面的服务器(例如example.com)?
[我知道这可能是显而易见的,但网络上的文档似乎暗示targetServer必须发送和“example.com”的allow-origin标头但是如果这是一个安全功能,恶意的targetServer.com不会总是提供合适的allow-origin标头吗?有意义的是,除了example.com之外,example.com还会向浏览器提供允许调用的服务器列表。
答案 0 :(得分:3)
目标服务器需要设置Access-Control-Allow-Origin
标头。
CORS旨在保护服务器免受意外的跨源请求。在CORS存在之前的世界中,服务器受到浏览器same-origin policy的跨源请求的保护。如果自动允许CORS到所有服务器,则此同源合同将中断,并且服务器将收到意外请求。为了防止这种情况,CORS规范作者让服务器负责规定允许哪些类型的跨源请求。
服务器不仅可以使用Access-Control-Allow-Origin
标头,还可以使用Access-Control-Allow-Credentials
,Access-Control-Allow-Methods
,Access-Control-Allow-Headers
和Access-Control-Expose-Headers
标头执行此操作。这些不同的头文件使服务器能够对配置其CORS行为进行细粒度控制。
因此,在您的示例中,恶意服务器可以设置这些标头,但标头不会自行执行任何操作。客户端需要做出有意识的决定才能向恶意服务器发送请求。实际上,客户端本身需要是恶意的。
答案 1 :(得分:2)
你误解了安全问题。
CORS的目的是防止其他网站上的Javascript从您的网站上读取敏感信息。
因此,您的网站必须明确说明允许哪些来源读取其数据。