企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 概念 内容安全策略 (CSP) 是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本 (XSS) 和数据注入等攻击。 <br> <br> # 作用 * 限制资源获取 * 报告资源获取越权 <br> <br> # 限制方式 * default-src 限制全局 * 定制资源类型 <br> <br> # 使用 一个策略由一系列策略指令所组成,每个策略指令都描述了一个针对某个特定类型资源以及生效范围的策略。 策略应当包含一个default-src策略指令,在其他资源类型没有符合自己的策略时应用该策略。 <br> ## meta标签 ~~~ <meta http-equiv="Content-Security-Policy" content="default-src 'self'"> ~~~ <br> ## HTTP header ~~~ res.writeHead(200, { 'Content-Type': 'text/html', 'Content-Security-Policy': 'default-src http: https:' } ~~~ <br> <br> # 资源类型 connect-src、img-src、manifest-src、style-src、media-src、script-src、frame-src 等 <br> <br> # 启用违例报告 默认情况下,违规报告并不会发送。为启用发送违规报告,你需要指定 report-uri 策略指令,并提供至少一个URI地址去递交报告: ~~~html Content-Security-Policy: default-src 'self'; report-uri http://reportcollector.example.com/collector.cgi ~~~ 然后你需要设置你的服务器能够接收报告,使其能够以你认为恰当的方式存储并处理这些报告。 <br> ## 违例报告的语法 作为报告的JSON对象报告包含了以下数据: * document-uri:发生违规的文档的URI。 * referrer:违规发生处的文档引用(地址)。 * blocked-uri:被CSP阻止的资源URI。如果被阻止的URI来自不同的源而非文档URI,那么被阻止的资源URI会被删减,仅保留协议,主机和端口号。 * violated-directive:违反的策略名称。 * original-policy:在 Content-Security-Policy HTTP 头部中指明的原始策略。 <br> <br> # 报告(report-only)模式 为降低部署成本,CSP可以部署为报告(report-only)模式。在此模式下,CSP策略不是强制性的,但是任何违规行为将会报告给一个指定的URI地址。此外,一个报告模式的头部可以用来测试一个修订后的未来将应用的策略而不用实际部署它。 ~~~html Content-Security-Policy-Report-Only: policy ~~~ 如果 `Content-Security-Policy-Report-Only` 头部和 `Content-Security-Policy` 同时出现在一个响应中,两个策略均有效。在 `Content-Security-Policy` 头部中指定的策略有强制性 ,而 `Content-Security-Policy-Report-Only` 中的策略仅产生报告而不具有强制性。 <br> <br> # 常见策略 所有内容均来自站点的同一个源 (不包括其子域名) ~~~html Content-Security-Policy: default-src 'self' ~~~ <br> 允许网页应用的用户在他们自己的内容中包含来自任何源的图片, 但是限制音频或视频需从信任的资源提供者(获得),所有脚本必须从特定主机服务器获取可信的代码. ~~~html Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com ~~~ 在这里,各种内容默认仅允许从文档所在的源获取, 但存在如下例外: * 图片可以从任何地方加载(注意 "\*" 通配符)。 * 多媒体文件仅允许从 `media1.com` 和 `media2.com` 加载(不允许从这些站点的子域名)。 * 可运行脚本仅允许来自于`userscripts.example.com`。