据我理解,关于CORS的工作原理是这样的:我有一个名为foo.com的网站,它提供一个页面X。X想向另一个域bar.com发送数据。如果bar.com启用了CORS(其头部生成Access-Control-Allow-Origin foo.com),那么页面X现在可以向bar.com发送数据。
据我所知,要让CORS起作用,重点是在bar.com上进行设置,与foo.com无关。这一切都是为了确保bar.com不接受来自任何旧域的请求。
然而,这真的对我来说毫无意义。我认为CORS是为了使foo.com能够指定X被允许与之通信。如果我们回到之前的例子,但这次X被恶意脚本攻击,因此它将数据秘密发送到evil.com,那么CORS该如何阻止呢?evil.com已经启用了CORS,并设置为*,因此它将接受来自任何地方的请求。这样,用户可能会认为他们正在使用foo.com网站,却不知不觉地向evil.com发送数据。
如果确实全是关于bar.com保护自己,那么为什么要让浏览器强制执行该策略呢?唯一可行的情况是如果evil.com提供了欺骗foo.com的Y页面,试图向bar.com发送数据。但是CORS由浏览器强制执行,你只需要让evil.com成为一个代理,向bar.com发送伪造的来源请求(数据从Y传到evil.com,evil.com将其虚假来源设置为foo.com,然后发送到bar.com)。
对我来说,这只有在反过来工作时才有意义。foo.com已启用CORS,并且其头部设置为Access-Control-Allow-Origin bar.com。这样,浏览器就会拒绝来自恶意脚本的evil.com的访问。然后强制执行策略是有道理的,因为它运行着可能会出问题的脚本。它不会阻止恶意站点尝试向bar.com发送恶意数据,但bar.com可以通过用户名/密码保护自己。如果foo.com有希望从X那里收到数据的端点,则可以将令牌嵌入X中,以确保evil.com不会将数据发送给它。
我感觉我没有真正理解重要的事情。非常感谢你的帮助。
据我所知,要让CORS起作用,重点是在bar.com上进行设置,与foo.com无关。这一切都是为了确保bar.com不接受来自任何旧域的请求。
然而,这真的对我来说毫无意义。我认为CORS是为了使foo.com能够指定X被允许与之通信。如果我们回到之前的例子,但这次X被恶意脚本攻击,因此它将数据秘密发送到evil.com,那么CORS该如何阻止呢?evil.com已经启用了CORS,并设置为*,因此它将接受来自任何地方的请求。这样,用户可能会认为他们正在使用foo.com网站,却不知不觉地向evil.com发送数据。
如果确实全是关于bar.com保护自己,那么为什么要让浏览器强制执行该策略呢?唯一可行的情况是如果evil.com提供了欺骗foo.com的Y页面,试图向bar.com发送数据。但是CORS由浏览器强制执行,你只需要让evil.com成为一个代理,向bar.com发送伪造的来源请求(数据从Y传到evil.com,evil.com将其虚假来源设置为foo.com,然后发送到bar.com)。
对我来说,这只有在反过来工作时才有意义。foo.com已启用CORS,并且其头部设置为Access-Control-Allow-Origin bar.com。这样,浏览器就会拒绝来自恶意脚本的evil.com的访问。然后强制执行策略是有道理的,因为它运行着可能会出问题的脚本。它不会阻止恶意站点尝试向bar.com发送恶意数据,但bar.com可以通过用户名/密码保护自己。如果foo.com有希望从X那里收到数据的端点,则可以将令牌嵌入X中,以确保evil.com不会将数据发送给它。
我感觉我没有真正理解重要的事情。非常感谢你的帮助。