CORS - 它是客户端的东西,服务器端的东西,还是传输级的东西?

Som*_*ser 37 javascript cors

我想了解CORS.根据我的理解,它使您能够限制哪些域可以访问服务器上的资源.然而,这似乎并不完整.例如,我有一个没有启用CORS的Web服务.我无法通过jQuery从我的Web应用程序中访问此Web服务(该应用程序在localhost上运行).但是,我可以从Postman获得Web服务.所以,我有点困惑.是否有一些涉及CORS的额外客户端工作?

Mat*_*ion 62

服务器负责报告允许的来源.Web浏览器负责强制执行仅从允许的域发送的请求.

未启用CORS时,浏览器将依赖相同的源策略.浏览器仅允许与源相同的主机发出请求.当未明确允许来源时,假定相同的原始策略.

除浏览器之外的HTTP客户端将不使用相同的源策略或CORS.从这些其他HTTP客户端发出的请求没有源.除非Postman桌面应用程序模拟浏览器,否则它将能够向任何URL发出请求.

需要CORS和相同的原始策略,因为浏览器不会隐含地信任它访问的网站.它们不保护原始站点,它们保护接收交叉源请求的站点.

如果没有这些策略,可以通过广告网络或脚本注入来分发重复加载网站的简单脚本,然后加载脚本的任何浏览器都会导致对网站的拒绝服务攻击.使用CORS和相同的源策略,浏览器将限制此脚本的影响.

CORS示例:

Web浏览器从中加载页面www.example.com.该页面包含一个发出请求的脚本www.example.org.请求的来源是www.example.com.浏览器首先发出请求或发送OPTIONS请求(预检请求).当服务器www.example.org收到来自其他来源的请求时,www.example.org它会响应一个响应头Access-Control-Allow-Origin,该响应头告诉浏览器允许发出请求的来源.它也可以响应其他标题Access-Control-Allow-Methods,Access-Control-Allow-Headers并且可以限制允许的请求类型.当浏览器被告知允许的来源时,它将阻止来自不允许的来源的未来请求.

  • @ZachTempleton CORS是一种放宽同源策略的方法.使用相同的源策略是因为浏览器不信任他们访问的站点或他们加载的内容.它可以防止一个站点恶意干扰另一个站点. (5认同)
  • 是的,我也很难将其视为安全性。如果我只是编写自己的网络浏览器而忽略 CORS 标头怎么办? (5认同)
  • 那么 CORS 是一个安全问题吗?如果 Web 浏览器有责任强制该请求仅从允许的域发送,我很难将其视为安全组件。 (3认同)
  • @redigaffi,那么没有人会使用该浏览器:) - 但你实际上并没有编写自己的浏览器(/sf/ask/217197361/)。问题是,使用不遵守同源策略的浏览器登录您的银行帐户将是极其危险/疏忽的。浏览器正在加载来自整个互联网的“随机”脚本,如果没有有效的同源策略,这些脚本可能会损害您委托给浏览器的信息。 (3认同)
  • @jpenna 不,它还有助于防止跨站点请求伪造攻击。如果站点使用 cookie 在没有同源策略的情况下进行身份验证,则注入的脚本可以使用该身份验证发出请求 https://medium.com/@electra_chong/what-is-cors-what-is-it-used-for-308cafa4df1a (2认同)

Joh*_* Mc 9

实际上这两者都有.您的浏览器将阻止CORS请求,除非请求的来源(即引荐来源URL域)位于目标上的白名单中,或者目标批准所有请求而不管来源.

在这两种情况下,都会添加所需的标头(Access-Control-Allow-Origin),告知浏览器可以将请求发送到目的地.

这可以确保具有恶意意图的人无法在用户不知情的情况下向另一个域发送请求.

  • 是的,但您必须加载受感染的网站才能发生这种情况。CORS 并不是万能的灵丹妙药,但它可以缓解 XSS (3认同)
  • “这可确保具有恶意的人无法在用户不知情的情况下向另一个域发送请求”是什么意思?恶意者可以设置自己的服务器并启用 CORS 并将用户信息发送到那里,例如使用 XSS,而用户永远不会知道。 (2认同)