美文网首页
HTTP内容安全策略参考

HTTP内容安全策略参考

作者: 羋学僧 | 来源:发表于2024-06-20 10:22 被阅读0次

什么是内容安全策略?

Content-Security-Policy是现代浏览器用来增强文档(或网页)安全性的 HTTP 响应标头的名称。Content-Security-Policy 标头允许您限制可以加载哪些资源(例如 JavaScript、CSS、图像等)以及可以从哪些 URL 加载这些资源。

虽然它主要用作 HTTP 响应标头,但您也可以通过元标记应用它。

术语“内容安全策略”通常缩写为CSP。

CSP 最初旨在减少跨站点脚本 (XSS) 攻击的攻击面,后来版本的规范还可以防御其他形式的攻击,例如点击劫持 (Click Jacking)。

CSP 指令参考

Content-Security-Policy头值由一个或多个指令(定义如下)组成,多个指令用分号分隔;

本文档基于内容安全策略级别 2 W3C 建议和 CSP 级别 3 W3C 工作草案提供

default-src

default-src指令定义了获取 JavaScript、图像、CSS、字体、AJAX 请求、框架、HTML5 媒体等资源的默认策略。并非所有指令都会回退到default-src。请参阅源列表参考以了解可能的值。

示例 DEFAULT-SRC 策略
default-src 'self' cdn.example.com;

CSP 1 级 25+ 23+ 7+ 12+

script-src

定义有效的 JavaScript 源。

示例 SCRIPT-SRC 策略
script-src 'self' js.example.com;

CSP 1 级 25+ 23+ 7+ 12+

style-src

定义样式表或 CSS 的有效来源。

示例 STYLE-SRC 策略
style-src 'self' css.example.com;

CSP 1 级 25+ 23+ 7+ 12+

img-src

定义有效的图像来源。

示例 IMG-SRC 政策
img-src 'self' img.example.com;

CSP 1 级 25+ 23+ 7+ 12+

connect-src

适用于XMLHttpRequest(AJAX)、、WebSocketfetch()。如果不允许,浏览器将模拟<a ping>HTTP状态代码。EventSource``400

示例 CONNECT-SRC 策略
connect-src 'self';

CSP 1 级 25+ 23+ 7+ 12+

font-src

定义字体资源的有效来源(通过 加载@font-face)。

示例 FONT-SRC 策略
font-src font.example.com;

CSP 1 级 25+ 23+ 7+ 12+

object-src

定义有效的插件源,例如<object>或。<embed>``<applet>

示例 OBJECT-SRC 策略
object-src 'self';

CSP 1 级 25+ 23+ 7+ 12+

media-src

定义有效的音频和视频源,例如 HTML5元素<audio><video>

示例 MEDIA-SRC 策略
media-src media.example.com;

CSP 1 级 25+ 23+ 7+ 12+

frame-src

定义加载框架的有效来源。在 CSP 级别 2 中,该指令frame-src已被弃用child-src。在 CSP 级别 3 中,该指令已取消 弃用,如果不存在,frame-src将继续遵循该指令。child-src

示例 FRAME-SRC 策略
frame-src 'self';

CSP 1 级

sandbox

为与属性类似的请求资源启用沙盒iframe sandbox。沙盒应用同源策略,阻止弹出窗口、插件和脚本执行。您可以将沙盒值保留为空以保留所有限制,或添加标志:allow-forms allow-same-origin allow-scripts allow-popups、、、、、、和allow-modals``allow-orientation-lock``allow-pointer-lock``allow-presentation``allow-popups-to-escape-sandbox``allow-top-navigation

沙箱策略示例
sandbox allow-forms allow-scripts;

CSP 1 级 25+ 50+ 7+ 12+

report-uri

指示浏览器将策略失败报告发布到此 URI。您还可以将Content-Security-Policy-Report-Only其用作 HTTP 标头名称,以指示浏览器仅发送报告(不阻止任何内容)。此指令在 CSP 级别 3 中已弃用,取而代之的是该report-to指令。

示例 REPORT-URI
report-uri /some-report-uri;

CSP 1 级 25+ 23+ 7+ 12+

child-src

定义使用以下元素加载的 Web 工作者和嵌套浏览上下文的有效来源

CHILD-SRC 策略示例
child-src 'self'

CSP 2 级 40+ 45 岁以上 15+

form-action

定义可用作 HTML<form>操作的有效源。

表单操作策略示例
form-action 'self';

CSP 2 级 40+ 36+ 15+

frame-ancestors

定义使用 嵌入资源的有效来源<frame> <iframe> <object> <embed> <applet>。将此指令设置为'none'大致相当于X-Frame-Options: DENY

示例 FRAME-ANCESTORS 策略
frame-ancestors 'none';

CSP 2 级 39+ 33+ 15+

plugin-types

<object>为通过和调用的插件定义有效的 MIME 类型 <embed>。要加载 ,<applet>您必须指定application/x-java-applet

插件类型策略示例
plugin-types application/pdf;

CSP 2 级 40+ 15+

base-uri

定义一组允许的 URL,可以在srcHTMLbase标签的属性中使用。

示例 BASE-URI 策略
base-uri 'self';

CSP 2 级 40+ 15+

report-to

定义由 HTTP 响应标头定义的报告组Report-To名称。有关详细信息,请参阅报告 API

报告指令示例
report-to groupName;

CSP 3 级 70+

worker-src

限制可以作为 Worker、SharedWorker 或 ServiceWorker 加载的 URL。

示例 WORKER-SRC 策略
worker-src 'none';

CSP 3 级 59+ 58 岁以上

manifest-src

限制应用程序清单可以加载的 URL。

示例 MANIFEST-SRC 策略
manifest-src 'none';

CSP 3 级 是的 40+

prefetch-src

定义请求预取和预渲染的有效源,例如通过link带有rel="prefetch"或 的标签rel="prerender"

示例 PREFETCH-SRC 策略
prefetch-src 'none'

CSP 3 级

navigate-to

限制文档可以通过任何方式导航到的 URL。例如,当单击链接、提交表单或window.location调用时。如果form-action存在,则表单提交将忽略此指令。已从 CSP 3 规范中删除。

示例导航至策略
navigate-to example.com

CSP 3 级

upgrade-insecure-requests

自动将链接、图像、javascript、css 等的 URL 从 http 转换为 https。

示例 UPGRADE-INSECURE-REQUESTS 策略
upgrade-insecure-requests

43+ 42+ 10.1+ 17+ 从技术上来说,不属于 CSP 规范的一部分。

block-all-mixed-content

阻止对不安全的 http URL 的请求。

示例 BLOCK-ALL-MIXED-CONTENT 策略
block-all-mixed-content

从技术上来说,它不属于 CSP 规范的一部分,将来可能会被删除。

源列表参考

所有以 结尾的指令都-src支持类似的值,称为源列表。多个源列表值可以用空格分隔,但'none'其中一个值应是唯一的。

源值 例子 描述
* img-src * 通配符,允许除数据:blob:文件系统:方案之外的任何 URL。
'none' object-src 'none' 防止从任何来源加载资源。
'self' script-src 'self' 允许从同一来源(相同方案、主机和端口)加载资源。
data: img-src 'self' data: 允许通过数据方案加载资源(例如 Base64 编码的图像)。
*domain.example.com* img-src domain.example.com 允许从指定域名加载资源。
**.example.com* img-src *.example.com 允许从 下的任何子域加载资源*example.com*
*https://cdn.com* img-src https://cdn.com 仅允许通过与给定域匹配的 HTTPS 加载资源。
https: img-src https: 仅允许在任何域上通过 HTTPS 加载资源。
'unsafe-inline' script-src 'unsafe-inline' 允许使用内联源元素,如 style 属性、onclick 或脚本标记体(取决于其所应用的源的上下文)和javascript:URI
'unsafe-eval' script-src 'unsafe-eval' 允许不安全的动态代码评估,例如 JavaScripteval()
'sha256-' script-src 'sha256-xyz...' 如果内联脚本或 CSS 的哈希值与标头中指定的哈希值匹配,则允许执行该脚本或 CSS。目前支持 SHA256、SHA384 或 SHA512。CSP 级别 2
'nonce-' script-src 'nonce-rAnd0m' 如果脚本(例如<script nonce="rAnd0m">:)标签包含与 CSP 标头中指定的 nonce 匹配的 nonce 属性,则允许执行内联脚本或 CSS。nonce 应为安全随机字符串,且不得重复使用。CSP级别 2
'strict-dynamic' script-src 'strict-dynamic' 允许允许的脚本通过非“解析器插入”脚本元素加载其他脚本(例如document.createElement('script');允许)。CSP 级别 3
'unsafe-hashes' script-src 'unsafe-hashes' 'sha256-abc...' 允许您在事件处理程序中启用脚本(例如onclick)。不适用于javascript:或内联<script> CSP 级别 3

内容安全策略示例

以下是内容安全策略的几个常见场景:

允许所有内容,但仅限来自同一来源

默认源‘self’;

仅允许来自同一来源的脚本

脚本src‘self’;

允许 Google Analytics、Google AJAX CDN 和同源

脚本src‘self’www.google-analytics.com ajax.googleapis.com;

入门政策

此策略允许来自同一来源的图像、脚本、AJAX、表单操作和 CSS,并且不允许加载任何其他资源(例如对象、框架、媒体等)。对于许多网站来说,这是一个很好的起点。

默认 src 'none';脚本 src 'self';连接 src 'self';img src 'self';样式 src 'self';base-uri 'self';表单操作 'self'

内容安全策略错误消息

在 Chrome 中,当发生内容安全策略脚本违规时,您会在Chrome 开发者工具中收到类似这样的消息:

拒绝加载脚本‘ script-uri ’,因为它违反了以下内容安全策略指令:“你的 CSP 指令”。

在 Firefox 中,您可能会在Web 开发人员工具中看到如下消息:

内容安全策略:报告专用 CSP 策略出现违规(“尝试执行内联脚本已被阻止”)。允许此行为,并发送 CSP 报告。

除了控制台消息外,securitypolicyviolation窗口上还会触发事件。

服务器端配置

任何服务器端编程环境都应允许您发回自定义 HTTP 响应标头。您也可以使用 Web 服务器发回标头。

Apache 内容安全策略标头

将以下内容添加到您的或文件httpd.conf中:VirtualHost``.htaccess

标头设置 Content-Security-Policy “default-src‘self’;”

Nginx 内容安全策略标头

在您的server {}块中添加:

add_header Content-Security-Policy "default-src‘self’;";

您还可以将其附加always到末尾,以确保 nginx 无论响应代码如何都会发送标头。

IIS 内容安全策略标头

您可以使用 IIS 管理器中的 HTTP 响应标头 GUI 或将以下内容添加到您的 web.config:

<系统.web服务器>
  <http协议>
    <自定义标题>
      <add name="Content-Security-Policy" value="default-src'self';" />
    </customHeaders>
  </http协议>
</system.web服务器>

相关文章

网友评论

      本文标题:HTTP内容安全策略参考

      本文链接:https://www.haomeiwen.com/subject/gdmccjtx.html