【发布时间】:2025-11-16 20:05:01
【问题描述】:
鉴于我正在加载这样的脚本:
<script nonce="35609alksdgx30q" src="example.com/main.js"></script>
在main.js 内部我需要获取脚本标签上的随机数:
const currentScriptElement = document.currentScript
const nonce = currentScriptElement.getAttribute('nonce')
如果console.log(nonce),我得到两个不同的值:
- 在 Firefox(最新)中,我得到:
35609alksdgx30q符合预期。 - 在 Chrome(最新)中,我得到:
""(空白字符串),这是我没想到的。
如果我使用实验性随机数属性 (HTMLElement.nonce) 获得随机数,我会得到以下值:
- 在 Firefox(最新)中,我得到:
null符合预期(因为 Firefox 不支持 nonce 属性) - 在 Chrome(最新)中,我得到:
35609alksdgx30q符合预期。
所以为了可靠地获得随机数,我必须这样做:
const nonce = currentScript.nonce || currentScript.getAttribute('nonce') || false
我的问题是,为什么 getAttribute('nonce') 不始终返回 nonce 值?我怀疑这是一个安全问题,但是为什么 Firefox 在使用 @ 时也不返回空字符串987654332@?
是的,从技术上讲,我知道 nonce 用于内联脚本,是的,该脚本已被站点的 CSP 策略清除。由于某些事情的实现方式,我必须以这种方式抓住nonce xD
【问题讨论】:
标签: javascript security nonce