内容安全策略 (CSP) 是一个 W3C 规范,用于指示客户端浏览器允许加载哪些位置和/或哪些类型的资源。此规范使用“指令”来定义目标资源类型的加载行为。指令可以使用 HTTP 响应头或 HTML <meta> 标签指定。
lusca是在 Apache 许可证 下开源的
首先
# In your sails app
npm install lusca --save --save-exact
然后在 config/http.js 中添加 csp
// ...
csp: require('lusca').csp({
policy: {
'default-src': '*'
}
}),
// ...
order: [
// ...
'csp',
// ...
]
为了让您了解它是如何工作的,以下是截至 2017 年支持的 CSP 指令的快照
| 指令 | |
|---|---|
| default-src | 如果未定义资源类型专用指令,则所有资源类型的加载策略(回退) |
| script-src | 定义受保护的资源可以执行哪些脚本 |
| object-src | 定义受保护的资源可以从哪里加载插件 |
| style-src | 定义用户应用于受保护资源的样式 (CSS) |
| img-src | 定义受保护的资源可以从哪里加载图像 |
| media-src | 定义受保护的资源可以从哪里加载视频和音频 |
| frame-src | 定义受保护的资源可以从哪里嵌入框架 |
| font-src | 定义受保护的资源可以从哪里加载字体 |
| connect-src | 定义受保护的资源可以使用脚本接口加载哪些 URI |
| form-action | 定义哪些 URI 可以用作 HTML 表单元素的操作 |
| sandbox | 指定用户代理应用于受保护资源的 HTML 沙盒策略 |
| script-nonce | 通过要求脚本元素上存在指定的 nonce 来定义脚本执行 |
| plugin-types | 定义受保护的资源可以通过限制可以嵌入的资源类型来调用的插件集 |
| reflected-xss | 指示用户代理激活或停用用于过滤或阻止反射型跨站点脚本攻击的任何启发式方法,相当于非标准 X-XSS-Protection 标头的效果 |
| report-uri | 指定用户代理将有关策略违规的报告发送到的 URI |
有关更多信息,请参阅 W3C CSP 规范。
不同的浏览器支持不同的 CSP 响应头。例如,Content-Security-Policy 是 W3C 标准,但 Chrome、Firefox 和 IE 的各个版本使用 X-Content-Security-Policy 或 X-WebKit-CSP。有关浏览器支持的最新信息,请参阅 OWasp。