在我看来,称为跨域资源共享(CORS)和内容安全策略(CSP)的技术在目的和实施方面似乎非常相似。
两者似乎都允许您通过HTTP响应标头将网页的原始版本所合并的资源的来源列入白名单。我可以看到的唯一区别是,CSP在HTTP响应中可以批准的内容上似乎更细粒度。
Answers:
CORS允许放宽域的“同源起源”策略。
例如,正常情况下,如果用户同时登录example.com
和example.org
,Same Origin Policy会阻止向响应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页面。通常,输出将被编码,但是说开发人员只忘记了一个输出字段。由于该策略阻止执行嵌入式脚本,因此阻止了攻击。
CORS允许站点A授予站点B许可(使用访问者的浏览器和凭据)从站点A读取(可能是私有的)数据。
CSP允许站点阻止自己从意外来源加载(可能是恶意的)内容(例如,作为对XSS的防御)。
上面的答案均未给出CSP和CORS之间的清晰明了的区别。这是我对它们的思考方式:
假设我们有一个abc.com网站,希望向def.net发送请求。
因此,在上面的示例中,CSP保护abc.com,而同源策略(缺少CORS)保护def.net。
CORS向第三方检查使用其服务的授权。因此,第三方提供或拒绝授权。
因此,例如,如果www.example.com中的页面需要向www.example.org发出请求,我们需要发送一个发送到www.example.org的OPTIONS请求,并以Origin:www.example.com作为请求的前身授权。现在,www.example.org提供或拒绝授权。
CSP通过指定可以从何处加载特定类型的内容来防止网页无意中从第三方加载恶意内容。因此,例如,您可以使用指令为以下每个脚本,css,媒体等提供有效的源
例:
内容安全策略:default-src'none'; script-src'self'www.google-analytics.com ajax.googleapis.com; connect-src'自我'; img-src'自我'; style-src'self';