脚本和样式元素的 HTML“nonce”属性的用途是什么?

2024-03-24

W3C 表示 HTML5.1 中有一个新属性,称为nonce for style and script可供网站的内容安全策略使用。

我用谷歌搜索了一下,但最终没有明白这个属性实际上是做什么的,以及使用它时会发生什么变化?


The nonce属性允许您将某些内联“列入白名单”script and style元素,同时避免使用 CSPunsafe-inline指令(这将允许all inline script and style),因此您仍然保留禁止内联的关键 CSP 功能script/style一般来说。

So the nonce属性是一种告诉浏览器特定脚本或样式元素的内联内容不是由某些(恶意)第三方注入到文档中的方法,而是由控制提供文档的服务器的任何人故意放入文档中的。


网络基础知识内容安全政策 https://web.dev/csp/文章的如果你绝对必须使用它 https://web.dev/csp/#if-you-absolutely-must-use-it部分有一个很好的例子说明如何使用nonce属性,相当于以下步骤:

  1. 对于您的 Web 服务器收到的针对特定文档的每个请求,让您的后端从加密安全随机数生成器生成至少 128 位的随机 Base64 编码字符串;例如。,EDNnf03nceIOfn39fn3e9h3sdfa。那是你的随机数。

  2. 获取步骤 1 中生成的随机数,并且对于任何内联script/style你想要“白名单”,让你的后端代码插入一个nonce在通过网络发送文档之前将属性添加到文档中,并以该随机数作为值:

     <script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
    
  3. 取出步骤 1 中生成的随机数,添加到前面nonce-,并让您的后端生成一个 CSP 标头,其中包含源列表的值script-src or style-src:

     Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
    

因此,使用随机数的机制是一种替代方案,可以替代让后端生成内联内容的哈希值script or style您希望允许,然后在 CSP 标头中的相应源列表中指定该哈希。


注意:浏览器不会(不能)检查服务器发送的随机数值在页面请求之间是否实际发生变化;因此,尽管完全不建议,但可以跳过上面的 1,并且不让后端为随机数动态执行任何操作,在这种情况下,您可以只放置一个nonce具有静态值的属性到文档的 HTML 源中,并发送具有相同随机数值的静态 CSP 标头。

但你不想以这种方式使用静态随机数的原因是,它几乎完全违背了使用随机数的全部目的——因为,如果你要使用这样的静态随机数,那时你可能只是使用unsafe-inline.


至于哪些元素是“nonceable”:CSP 规范当前限制浏览器仅检查 noncescript and style元素。以下是规格详细信息:

  • In https://w3c.github.io/webappsec-csp/#match-element-to-source-list https://w3c.github.io/webappsec-csp/#match-element-to-source-list,参见步骤 2:
    如果类型是“script”或“style”,并且 §6.6.3.1 元素是否为 nonceable?返回“Nonceable”...

  • At https://w3c.github.io/webappsec-csp/#is-element-nonceable https://w3c.github.io/webappsec-csp/#is-element-nonceable, the 元素是 nonceable 吗?算法本身不仅仅检查script/style元素;但规范调用的唯一地方是上面引用的部分,这将其限制为script/style。因此,如果您在任何其他元素上放置随机数,规范要求浏览器忽略它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

脚本和样式元素的 HTML“nonce”属性的用途是什么? 的相关文章

  • 如何使用 htaccess 重定向 html 扩展?

    目前 这两个链接显示同一页面 http www example com podcast episode html http www example com podcast episode html http www example com
  • Python。短语表示,如何改变?

    我不知道这个短语中存在的编码是什么 我也想知道这个问题的答案 主要是 我想改变我的措辞 例如 你好世界 变成你好 20世界 0A 老天啊 变成ol C3 A1 20mundo 0A 0A 我想要一个 python 解决方案 如果我有 gt
  • 所有事件的 HTML5 EventSource 监听器?

    我使用 EventSource 在 JavaScript 客户端应用程序中推送通知 我可以像这样附加事件监听器 source addEventListener my custom event type function e console
  • 如何在 HTML 表格上使用分页?

    我正在尝试使用这个分页library http flaviusmatis github io simplePagination js 在我的 HTML 表格页面 特别是浅色主题 中 但不知何故 我无法理解如何在我的 HTML 页面中以这种方
  • jQuery 选择器定位具有 id AND class 的元素不起作用

    我有以下事件处理函数 jQuery document on click button submitb function e alert jQuery 包含在 html 文档中 但是 如果我点击 div class submitb Go di
  • Intro.js 2页然后返回首页

    我在用intro js http introjs com 为我的网站创建一个小介绍 我希望游览从第 1 页 主页 2 另一页 然后回到第 1 页 主页 我已经成功地从第 1 2 页开始 但不确定如何让它返回到第 1 页 我对 javascr
  • Groovy - 在对象实例化期间忽略映射中的额外属性

    有没有办法让 groovy 在对象实例化期间忽略映射中的额外属性 例子 class Banana String name def params name someGuy age 13 new Banana params 在这个例子中 gro
  • 如何使用 poedit 解析 Timber(树枝)模板并检测要翻译的引用字符串

    我想用 poedit 解析 Timber 的树枝模板 并且需要翻译引用的内容 问题是我找不到不跳过引用内容的解析器 Example
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 以 HTML 格式发送电子邮件

    我想发送 HTML 格式的电子邮件 如下图所示 我怎样才能做到这一点 请帮我 提前致谢 String body new String table tr td br header td tr br br Get b Best Score b
  • Gmail 和 Google Chrome 12+ 中的“从剪贴板粘贴图像”功能如何工作?

    我注意到一个来自 Google 的博文 http gmailblog blogspot com 2011 06 pasting images into messages just got html其中提到 如果您使用的是最新版本的 Chro
  • 响应式2列2行布局

    我一直在试图弄清楚如何创建这个布局 我有一个 2 列布局 左列有 1 行 右侧有 2 行 我试图让它流畅地调整 我遇到的问题是 我希望右侧顶部图像的顶部与左侧图像的顶部对齐 而底部图像的底部与左侧图像的底部保持对齐 我应该使用桌子吗 这是我
  • 如何使网页中出现的图标闪烁/闪烁

    几天前我开始研究高级java 我知道太晚了 我被困在使图标 出现在任务栏上 闪烁的特定任务上 这种闪烁应该根据特定条件发生 这意味着可以使用以下方法来实现javascript 我已经搜索了一段时间了 但是有没有办法让图标每隔 1 秒左右出现
  • 理解

    我正在尝试在网站中使用所选的图像 假设我有一个简单的网站 用户可以使用以下命令从系统中选择图像
  • Python:使类可迭代

    我继承了一个包含许多大型类的项目 这些类仅由类对象 整数 字符串等 组成 我希望能够检查属性是否存在 而无需手动定义属性列表 是否可以制作一条蟒蛇classiterable 本身使用标准语法 也就是说 我希望能够使用迭代所有类的属性for
  • 在 HTML5 中使用 JS 创建内联 SVG

    我正在使用本地 HTML5 文件 它有在顶部 我在里面放了这样的东西
  • Webpack 和 Angular HTML 图像加载

    我一直对 webpack 和 Angular 感到头疼 这可能有一个简单的答案 但我无法弄清楚 我已经阅读了堆栈溢出中关于这个主题的几乎所有答案 但都无济于事 我有一个像这样的 html 页面 还有其他包含图像的模板 img
  • 大型应用的回流/布局性能

    我正在使用 GWT 构建一个 HTML 应用程序 其性能总体上是正确的 有时 它会加载 DOM 中的许多对象 并且应用程序会变得很慢 我使用 Chrome 开发者工具分析器来查看时间花在哪里 在 Chrome 下 一旦应用程序被编译 即没有
  • 如何仅突出显示嵌套表的最里面的表行?

    我有几个嵌套表 我想突出显示鼠标指针下方的最里面的行 我怎样才能做到这一点 一些提示 我使用嵌套表来显示递归表格数据 表可以嵌套 10 层 嵌套正如您所期望的那样 table tr td table tr td table tr td 可能
  • window.open 使用 css 样式

    我想设计我的 window open 目前 我的网页上有一些项目由于解析了某个类而打开 然后在新窗口中打开指定的文本 我想更改字体大小 字体和填充等 这是我的 JavaScript 代码

随机推荐

  • Gradle 插件从插件 jar 复制文件

    我正在创建我的第一个 gradle 插件 我正在尝试将文件从分发 jar 复制到我在项目中创建的目录中 尽管该文件存在于 jar 内 但我无法将其复制到目录中 这是我的任务代码 import org gradle api DefaultTa
  • org.w3c.dom 包可以从多个模块访问:、java.xml

    我无法导入org w3c dom NodeList打包到 Eclipse 它正在显示 org w3c dom 包可以从多个模块访问
  • 无法同时满足键盘和 UIToolBar 的约束

    我有表格视图 下面有文本视图 我在键盘上方添加一个工具栏以显示 完成 按钮 当我点击一行中的按钮来删除该行时 它会显示 LayoutConstraints 问题 如下所示 下面的日志还显示了事件的流程 我可以确认这个问题与工具栏有关 如果我
  • 列出以前删除的重新创建的相册名称

    背景 我想列出我的帐户中与给定名称匹配的所有相册 Problem 删除相册后 然后重新创建一个具有完全相同名称的相册 代码为 albumQuery gt setAlbumName 即使相册已成功创建 查找相册名称也会失败并返回 404 下面
  • 从复杂(混合)句子中提取简单句子的算法?

    有没有一种算法可以用来从段落中提取简单的句子 我的最终目标是稍后对生成的简单句子运行另一个算法来确定作者的情绪 我已经从 Chae Deug Park 等来源对此进行了研究 但没有讨论准备简单的句子作为训练数据 提前致谢 看一眼Apache
  • npm cordova 警告引擎窗口

    我正在尝试通过命令行安装 cordova 我收到此错误 npm WARN engine email protected cdn cgi l email protection wanted node gt 0 6 npm 1 current
  • 我可以将不同类型的参数传递给 Android 中的 AsyncTask 吗?

    我想实现一个通用的线程保存类 它采用 ImageView 的 RessourceId 和存储所需图像文件的 Url http 它将下载图像并填充 UiThread 中 ImageView 的 src 我想异步任务 http develope
  • 从 phpMyAdmin 更改 mysql 时区

    我正在尝试更改数据库的时区 我在共享服务器数据库支持人员不能只为我更改它 当前时区是 1 00我想要它作为 05 30 我搜索并尝试遵循但没有任何效果 date default timezone set timezone name 添加到我
  • 在没有 Sparc 硬件的情况下运行 Sparc 二进制文件

    在过去的几个月里 我一直很好奇尝试为 SPARC 处理器 V8 或 V9 进行一些组装 我的问题是 我无法访问 SPARC 机器 有没有办法可以在我的 x86 机器上运行 SPARC 二进制文件 我看过 QEMU 但不太确定如何设置它 Si
  • 如何修改生成器角度全栈图标?

    如何修改生成器角度全栈图标 我正在部署入门项目https github com DaftMonk generator angular fullstack https github com DaftMonk generator angular
  • 如何从 Azure DevOps 管道中的另一个作业访问 InvokeRestAPI 任务的响应?

    我正在尝试通过从 Azure DevOps 管道中调用 Elasticsearch 资源的 REST API 来自动部署 Elasticcloud 中的 Elasticsearch 资源 使用 InvokeRestAPI 任务调用 API
  • sed 是否阻塞?

    我的印象是 sed 没有阻塞 因为当我说 iostat sed sed在数据到达时对其进行处理 但是当我这样做时 iostat sed netcat Then sed blocks netcat 我对吗 sed当它不打印到终端时 将在缓冲模
  • OCIEnvCreate 失败,返回代码 1,但错误消息文本不可用

    我在这个异常中遇到了一些麻烦 我已经尝试过我看到的这个选项here https stackoverflow com questions 12901045 ocienvcreate failed with return code 1 but
  • ASP.NET Web 方法和 WCF 服务有什么区别?

    我是 Net 的新手 不明白其中的区别 有人能指出我正确的方向吗 ASP NET Web 服务是为构建通过 HTTP 使用简单对象访问协议 SOAP 发送和接收消息的应用程序而开发的 WCF 用于使 NET Framework 应用程序能够
  • 如何在Eclipse中找到被重写的方法?

    当我在 eclipse java 中查看一个方法时 如何跳转到它覆盖 扩展的方法 三种方法可以解决这个问题 超链接方式 鼠标 键盘 将鼠标悬停在覆盖的方法上时按 CTRL 键 您应该看到一个名为 打开超级实现 的选项 点击它 From he
  • 使用 CXF 拦截器进行错误处理 - 更改响应消息

    我正在尝试处理来自后端的错误 这handleMessage 如果发生错误但内容是 XmlMessage 的实例 则调用 我想将其更改为我自己的响应 只需设置响应代码并添加一些消息 我还没有找到任何合适的文档可以告诉我如何做到这一点 这些示例
  • 如何使用 UTC 时区偏移格式化 DateTime?

    这是什么类型的日期格式 2020 03 26T00 57 08 000 08 00 我在用着日期格式 https api flutter dev flutter intl DateFormat class html class DateTi
  • 生成 javadoc 作为 word 文档

    我们怎样才能将javadoc生成为word文档而不是传统的html页面呢 查看 doclet http doclet com http doclet com其中有大量自定义 javadoc 渲染的示例 即 PDF 等 并且还研究了 Apac
  • (ResourceGroupNotFound) 资源组“????”创建天蓝色媒体服务帐户时找不到

    我正在尝试使用此处的说明创建服务主体帐户 https learn microsoft com en us azure media services latest stream files tutorial with api examine
  • 脚本和样式元素的 HTML“nonce”属性的用途是什么?

    W3C 表示 HTML5 1 中有一个新属性 称为nonce for style and script可供网站的内容安全策略使用 我用谷歌搜索了一下 但最终没有明白这个属性实际上是做什么的 以及使用它时会发生什么变化 The nonce属性