从我的角度来看,被称为跨源资源共享(CORS)和内容安全策略(CSP)的技术在目的和实现方面似乎非常相似
两者似乎都允许您通过HTTP响应标头将您网页的不妥协版本所包含的资源来源列入白名单。我能看到的唯一区别是,在您的HTTP响应中,CSP似乎更精细。
答案 0 :(得分:52)
CORS允许为域名放宽Same Origin Policy。
e.g。通常,如果用户同时登录example.com
和example.org
,则同源策略会阻止example.com
向example.org/current_user/full_user_details
发出AJAX请求并获得对响应的访问权。
这是网络的默认策略,可防止用户同时登录多个网站时泄露数据。
现在使用CORS,example.org
可以设置一个策略,说明它将允许原点https://example.com
读取AJAX的响应。如果example.com
和example.org
由同一公司运行并且在用户的浏览器中允许源之间的数据共享,则可以这样做。它只影响客户端,而不是服务器端。
.js
文件。这可以有效地作为针对XSS攻击的另一道防线,攻击者将尝试将脚本注入HTML页面。通常output would be encoded,但是开发人员只忘记了一个输出字段。由于该策略阻止了内联脚本的执行,因此攻击被挫败。
答案 1 :(得分:38)
CORS允许站点A向站点B授予从站点A读取(可能是私有的)数据的权限(使用访问者的浏览器和凭据)。
CSP允许网站阻止本身从意外来源加载(可能是恶意的)内容(例如,作为对XSS的防御)。
答案 2 :(得分:13)
上述答案都没有给出CSP和CORS之间明确而简洁的区别。这是我思考它们的方式:
假设我们有 abc.com 网站想要向
所以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';