getAttribute('nonce') 在 Firefox 中工作,但不能在 Chrome 中工作



鉴于我正在加载这样的脚本:

<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')不能始终如一地返回随机数值?我怀疑这是一个安全的事情,但是为什么Firefox在使用getAttribute('nonce')时不返回一个空字符串呢?


是的,我知道从技术上讲nonce用于内联脚本,是的,该脚本已由站点的 CSP 策略清除。由于某些事情是如何实现的,我必须以这种方式抓住noncexD

Chrome 正试图阻止人们使用 CSS 属性选择器来窃取随机数,而 Firefox 在跟随他们的领导方面落后了。

(如果您打开控制台,您还会注意到 Chrome 已将 DOM 中的完整 nonce 值替换为空的nonce属性(。

请参阅:https://www.chromestatus.com/features/5685968463986688,https://bugs.chromium.org/p/chromium/issues/detail?id=680419

相关内容

最新更新