CORS和CSP有什么区别?

nic*_*orm 52 security cross-site web

从我的角度来看,称为跨源资源共享(CORS)内容安全策略(CSP)的技术在目的和实现方面似乎非常相似.

两者似乎都允许您通过HTTP响应标头将您网页的不妥协版本所包含的资源来源列入白名单.我能看到的唯一区别是,在您的HTTP响应中,CSP似乎更精细.

Sil*_*Fox 62

CORS允许为域放宽同源策略.

例如,通常,如果用户登录到两个example.comexample.org,同源策略防止example.com从制造AJAX请求example.org/current_user/full_user_details并获得对响应.

这是Web的默认策略,可防止用户同时登录多个站点时泄露数据.

现在使用CORS,example.org可以设置一个策略,说它将允许原点https://example.com读取AJAX做出的响应.这如果同时进行example.com,并example.org通过同一家公司和起源之间的数据共享是在用户的浏览器被允许的跑了.它只影响客户端,而不是服务器端.

另一方面,CSP设置了可以在当前站点上运行的内容的策略.例如,如果JavaScript可以内联执行,或者.js可以从哪些域文件加载.这可以有效地作为抵御XSS攻击的另一道防线,攻击者将尝试将脚本注入HTML页面.通常输出会被编码,但是说开发人员只忘记了一个输出字段.由于该策略阻止了内联脚本的执行,因此攻击被挫败.

  • 比所有的mozilla / html5rocks / w3c文档更加清晰明了。谢谢。 (2认同)

Que*_*tin 47

CORS允许站点A向站点B授予从站点A读取(可能是私有的)数据的权限(使用访问者的浏览器和凭证).

CSP允许站点阻止自己从意外来源加载(可能是恶意的)内容(例如,作为对XSS的防御).

  • @mathk — 站点 A 阻止数据发送到站点 B(可以通过 CSP 实现)与站点 B 阻止站点 A 从中读取数据(这是默认行为,但可以通过 CORS 放松)完全不同。 (4认同)
  • @mathk — 不。正如我在答案中所说,它们是完全不同的东西。 (2认同)

par*_*ite 18

上述答案都没有给出CSP和CORS之间明确而简洁的区别.这是我思考它们的方式:

假设我们有想要向def.net发送请求的abc.com网站.

  1. 当用户在浏览器中访问abc.com时,abc.com服务器返回abc.com HTTP响应,此响应中的CSP限制可以阻止浏览器中的abc.com向def.net发出请求
  2. 如果abc.com HTTP响应中没有CSP限制,则浏览器中的abc.com可以向def.net发送请求
  3. 收到请求后,def.net服务器响应def.net HTTP响应,此响应中的CORS限制可以阻止浏览器中的abc.com加载它

所以CSP 在上面的例子中保护abc.com和CORS保护def.net.

  • 说 Content-Security-Policy 阻止对外部资源的调用和 Cross-Origin-Resource-Sharing 阻止来自外部源的调用是否是正确的简化?举个例子。为了让 abc.com 在 iframe 中显示 def.net,abc.com 不得使用其 CSP 设置阻止 def.net,并且 def.net 不得使用其 CORS 设置阻止 abc.com。 (4认同)
  • @JodySowald 这似乎很合适。 (2认同)