📅  最后修改于: 2023-12-03 14:50:08.573000             🧑  作者: Mango
CSP 是一种安全机制,用于减少和报告跨站点脚本 (XSS) 攻击、数据盗取等 Web 攻击。CSP 可以限制执行非法代码的能力,保护站点不被第三方注入恶意代码。CSP 的基本思想是通过白名单的方式限制页面中可执行的脚本,限制可加载的资源,保证页面中的代码是可信的。
在 HTML 头部添加 CSP,可以使用 HTTP 头信息的方式设置。例如:
Content-Security-Policy: default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';
在这个例子中,我们设置默认策略为 "none",也就是不允许任何外部资源加载。我们允许 JS 脚本只从页面自身加载,允许连接的其他源只从页面自身加载,我们允许图像只从页面自身加载,样式表只从页面自身和 ajax.googleapis.com 加载。
使用 CSP,可以有效地限制非法代码的执行。在 CSP 中采用一个白名单机制,当脚本被加载时,将只执行这个白名单中的代码。例如:
Content-Security-Policy: script-src 'self' 'nonce-EDNnf03nceIOfn39fn3e9h3sdf';
这个例子中的 'nonce-EDNnf03nceIOfn39fn3e9h3sdf'
是一个不可预测的字符串,当一个页面被加载时,它将作为一个随机变量添加到脚本标签中,并与 CSP 内的随机串进行比较。只有在这个随机量与 CSP 中的一致时,才会允许执行这个脚本。
CSP 主要采用白名单机制来限制非法代码的执行,也就是说,只有在指定的白名单中的代码才能够被执行。在 CSP 中采用白名单机制,主要是限制 Web 应用程序向客户端输出数据的形式。例如:
Content-Security-Policy: default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self'; font-src 'self'; frame-src 'none';
在这个例子中,除了允许页面自身加载的外,其他所有来源的内容均被禁止。
与白名单机制相反,黑名单机制主要是指定禁止执行的代码,可以使用 report-uri
来收集被禁止执行的代码的报告。例如:
Content-Security-Policy: script-src 'none'; report-uri /report/CSXSS
在这个例子中,我们禁止所有的脚本执行。在 /report/CSXSS
中收集这些违规的脚本的报告。
总之,CSP 的主要目的是帮助 Web 应用程序开发者保护 Web 应用程序中的敏感数据,从而减少攻击。CSP 使得攻击者无法在 Web 页面上执行可疑的 JavaScript 代码,从而保护了 Web 应用程序免受 Malware 和其他恶意软件的攻击。