首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >脚本和样式元素的HTML "nonce“属性的用途是什么?

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

Stack Overflow用户
提问于 2017-03-21 17:18:27
回答 1查看 120.2K关注 0票数 203

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

我用谷歌搜索了一下,但最后还是没弄明白,这个属性到底是做什么的,在使用它时有什么变化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-21 18:10:36

nonce属性允许您将某些内联scriptstyle元素“白名单”,同时避免使用CSP unsafe-inline指令(它将允许所有内联script/style),因此您仍然保留了CSP的关键特性,即一般情况下不允许内联script/style

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

网络基础Content Security Policy文章的部分有一个很好的例子,说明了如何使用nonce属性,它分为以下几个步骤:

  1. 对于您的Web服务器接收到的对特定文档的每个请求,让您的后端从加密安全的随机数生成器(例如EDNnf03nceIOfn39fn3e9h3sdfa )生成一个至少128位的随机base64编码字符串。这就是你的现实主义。

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

  1. 获取步骤1中生成的现时值,预置nonce-,并让您的后端使用script-srcstyle-src的源列表值中的值生成CSP header:

内容-安全-策略:脚本-源'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'

因此,使用现时值的机制是另一种选择,而不是让您的后端生成您想要允许的内联scriptstyle的内容的散列,然后在CSP标头中的适当源列表中指定该散列。

请注意,因为浏览器不(不能)检查在页面请求之间发送的nonce值是否发生了变化,所以可以跳过上面的1,并且不让您的后端为nonce动态执行任何操作,在这种情况下,您可以将一个带有静态值的nonce属性放入文档的HTML源中,然后发送一个带有相同nonce值的静态CSP头。

但是你不想以这种方式使用静态nonce的原因是,它很可能在一开始就违背了使用nonce的全部目的-因为,如果你要使用像那样的静态nonce,在这一点上你可能只需要使用unsafe-inline

至于哪些元素是“不可撤销的”:CSP规范目前限制浏览器只检查scriptstyle元素的随机数。以下是规格的详细信息:

如果类型是“脚本”或“样式”,并且§ 6.6.3.1是元素不可撤销的吗?返回"Nonceable"…

  • https://w3c.github.io/webappsec-csp/#is-element-nonceable,元素是不可改变的吗?algorithm本身并不只检查script/style元素;但规范调用的唯一地方是上面引用的部分,它将其限制为scriptstyle。因此,如果您将现时值放在任何其他元素上,则当前规范要求浏览器忽略它。
票数 271
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42922784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档