nonce 与自定义数据。在客户端是 nonce= 还是 nonce-?在客户端也是 nonce-xyz 或 'nonce-xyz'

nonce versus custom data. is it nonce= or nonce- on the client side? also is it nonce-xyz or 'nonce-xyz' on the client side

我对内联脚本和 CSS 的 nonce 实现感到困惑。我在服务器上定义了

res.locals.cspNonce = crypto.randomBytes(16).toString("hex"); 

scriptSrc: ["'self'", 'nonce-${res.locals.cspNonce}']

并注意到实际的 nonce 值本身并没有显示在客户端浏览器上 (Brave) - 尽管 none - 脚本正在执行 - 所以不确定这是否只是浏览器级别安全问题,因为当我将客户端内联 nonce 更改为硬编码的内容(如 'abc')时,脚本拒绝 运行,这很好。我只是还不明白。 “nonce”只是一个标准短语吗?如果我这样决定,我可以只设置服务器端

 scriptSrc: ["'self'", `'plackard=${res.locals.cspNonce}'`]

所以短语 'nonce' 真的无关紧要,我刚刚创建了一个规则,客户端所有脚本必须匹配属性“plackard=$somerandomcharaters”?

最后,服务器端设置倾向于在 'nonce=something' 或 nonce-something 周围加上单引号。为什么?我了解自定义数据属性的标准 HTML 5 语法是:https://www.w3schools.com/tags/att_global_data.asp

    data-custom="abc" 

不是

    'data-custom="abc"'

额外的单引号似乎没有必要,甚至会混淆浏览器客户端?因此,在所有 nonce 周围加上额外的单引号,还是放弃它们? nonce 是标准化 HTML5 fieldname="value" 范式的例外,因此是否需要单引号 'fieldname="value"'?

如果这是我的愿望,将我的 'nonce' 服务器端设置为要求我的脚本数据属性说

会有任何问题吗
  data-my-custom-safe-attribute="$insertRandomCryptographyHere"

?

and noticed the actual nonce values itself were not showing up on the client browser (Brave)

检查 Content-Security-Policy HTTP header,你的 nonce 值在那里。

Is "nonce" just a standard phrase? If I so decided could I just set server-side scriptSrc: ["'self'", 'plackard=${res.locals.cspNonce}']

nonce — «只能使用一次的号码»。此名称由 CSP 规范保留,如果您使用任何其他名称 - 浏览器将忽略 'plackard-base64value' 令牌 abd scripts/styles 将无法执行。

Lastly, the server-side settings tend to put single quotes around the 'nonce=something' or nonce-something. Why?

没有'OR'。单引号 'nonce-base64value' 仅在指令中使用:
script-src 'self' 'nonce-ABC' localhost http://example.com data:
所有 keyword-expressions (标记)都是单引号,所有 host-sources 和 scheme-sources - 不是。

nonce="ABC" 用于 HTML-tags 并且它没有单引号:

<script nonce="ABC">
 var inline = 1;
</script>

强烈遵守 HTML5 fieldname="value" 范式。
请注意,在指令中使用 'nonce-SomeValue' 标记,在 HTML 标签中使用 nonce="SomeValue" 属性。