getAttribute('nonce')在Firefox中有效,但在Chrome中不起作用

时间:2018-08-29 07:54:21

标签: javascript security nonce

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

<script nonce="35609alksdgx30q" src="example.com/main.js"></script>

main.js内,我需要抓住script标签上的现时值:

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在出现以下情况时也不返回空字符串?使用getAttribute('nonce')


是的,我在技术上知道nonce用于内联脚本,是的,站点的CSP策略已清除此脚本。由于某些事情是通过xD实现的,因此我必须以这种方式来抢nonce

1 个答案:

答案 0 :(得分:0)

Chrome浏览器试图阻止人们使用CSS属性选择器来窃取随机数,而Firefox则落后于他们的领先地位。

(您还会注意到,如果您打开控制台,Chrome浏览器已使用空的nonce属性替换了DOM中的完整现时值)。

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