CORS和CSP之间有什么区别?

时间:2016-09-14 10:33:56

标签: security web cross-site

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

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

4 个答案:

答案 0 :(得分:52)

CORS允许为域名放宽Same Origin Policy

e.g。通常,如果用户同时登录example.comexample.org,则同源策略会阻止example.comexample.org/current_user/full_user_details发出AJAX请求并获得对响应的访问权。

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

现在使用CORS,example.org可以设置一个策略,说明它将允许原点https://example.com读取AJAX的响应。如果example.comexample.org由同一公司运行并且在用户的浏览器中允许源之间的数据共享,则可以这样做。它只影响客户端,而不是服务器端。

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

答案 1 :(得分:38)

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

CSP允许网站阻止本身从意外来源加载(可能是恶意的)内容(例如,作为对XSS的防御)。

答案 2 :(得分:13)

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

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

  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 加载它。 (请注意,默认情况下,Same-origin策略将限制响应加载,除非CORS另有指定)
  4. 所以CSP保护 abc.com ,同源策略(缺少CORS)保护上面示例中的 def.net

答案 3 :(得分:2)

CORS检查第三方是否有权使用其服务。因此,第三方提供或拒绝授权。

例如,如果www.example.com中的某个页面需要向www.example.org发出请求,我们需要发送一个OPTIONS请求发送到www.example.org,其中包含Origin:www.example.com请求授权的前兆。现在,www.example.org提供或拒绝授权。

CSP通过指定可从中加载特定类型的内容的位置来防止网页无意中从第三方加载恶意内容。因此,例如,您可以通过使用指令为以下每个脚本,css,媒体等提供有效的源

示例:

Content-Security-Policy:default-src' none&#39 ;; script-src' self' www.google-analytics.com ajax.googleapis.com; connect-src' self&#39 ;; img-src' self&#39 ;; style-src' self';