关于客户端安全性,CORS 除了颠覆同源策略之外还有啥作用?

Posted

技术标签:

【中文标题】关于客户端安全性,CORS 除了颠覆同源策略之外还有啥作用?【英文标题】:With respect to client side security, does CORS do anything other than subvert same-origin-policy?关于客户端安全性,CORS 除了颠覆同源策略之外还有什么作用? 【发布时间】:2011-09-08 13:44:49 【问题描述】:

(如果没有,它是否真的提高了客户端的安全性?)

我正在考虑服务器 X 的脚本使用 XHR 从服务器 Y(支持 CORS)获取和运行不受信任的代码的情况。

(显然评估不受信任的代码是不好的™)

【问题讨论】:

脚本本身不受跨域限制。例如,来自域 X 的脚本可以包含来自域 Y 的脚本,并且代码将执行。这可以通过没有 CORS 的常规脚本标签来完成。 我知道这一点,我认为这对回答这个问题没有帮助 【参考方案1】:

我根本不使用 CORS 来提高安全性。我使用 CORS 访问不同域上的已知 Web 服务,如果没有 CORS,我将无法访问。在我看来,这与提高安全性无关,而是允许将来自一个域的数据委托给另一个域。

【讨论】:

是的,这是我的假设,但它被认为是某种安全改进,所以我得到了错误的想法,谢谢。那么由于 CORS,同源策略或多或少是多余的? CORS 是为了让您和您的数据服务器能够进行通信。同源策略仍然适用于任何未实现 CORS 的服务器。我猜你的意思是坏人可以用 * 域实现 CORS,这将允许任何域获取他们的数据......【参考方案2】:

CORS 颠覆了同源策略,但有选择性。例如,银行网站域根本不会设置 CORS 标头(以保持同源完全有效),因为从其他域下载的任何 javascript 都不应该向银行发出 AJAX 请求(或者他们可能只允许他们信任的合作伙伴网站)。 CDN 可能会设置 Access-Control-Allow-Origin "*",因为它不关心从另一个域下载的 JavaScript 是否正在向 CDN 发出 AJAX 请求。

【讨论】:

所以这是对安全性的(选择性)削弱。 如果同源政策规定你永远不能打开你公寓的门,那么 CORS 说我们可以为披萨人破例。【参考方案3】:

CORS 不是关于强化安全性,而是关于削弱它(但仅在获得服务器许可的特定条件下)。

如果您想在 AJAX 请求中从另一个服务器访问某些内容,而没有 CORS,则由于“安全性”(同源策略)而不允许您访问,这就是它的结尾*。使用 CORS,其他服务器可以授予权限以减少该安全障碍。

* 除了像 JSONP 这样的 hack,但这也需要服务器的许可

【讨论】:

你对我最初的问题回答是还是不是? @adam77 您最初问题的答案是 CORS 不会做任何与客户端安全相关的事情,至少据我了解该短语。同源策略可防止针对 3rd 方服务的基于浏览器的普通拒绝服务攻击。 CORS 允许第三方服务器通知浏览器它不需要该保护。

以上是关于关于客户端安全性,CORS 除了颠覆同源策略之外还有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

同源策略与 CORS 的用处

同源策略:JSONP和CORS

SpringBoot配置Cors跨域请求

前端安全之同源策略CSRF 和 CORS

同源策略CORS

SpringBoot使用CORS解决跨域请求问题