鉴于我正在加载这样的脚本:
<script nonce="35609alksdgx30q" src="example.com/main.js"></script>
在main.js
内,我需要抓住script标签上的现时值:
const currentScriptElement = document.currentScript
const nonce = currentScriptElement.getAttribute('nonce')
如果console.log(nonce)
,我得到两个不同的值:
35609alksdgx30q
,如预期的那样。""
(空字符串),这是我所不希望的。如果我使用实验性的随机数属性(HTMLElement.nonce)获得随机数,则会得到以下值:
null
符合预期(因为Firefox不支持nonce属性)35609alksdgx30q
,如预期的那样。因此,要可靠地获得随机数,我必须执行以下操作:
const nonce = currentScript.nonce || currentScript.getAttribute('nonce') || false
我的问题是,为什么getAttribute('nonce')
不能始终返回nonce值?我怀疑这是安全的,但是为什么Firefox在出现以下情况时也不返回空字符串?使用getAttribute('nonce')
?
是的,我在技术上知道nonce
用于内联脚本,是的,站点的CSP策略已清除此脚本。由于某些事情是通过xD实现的,因此我必须以这种方式来抢nonce
答案 0 :(得分:0)
Chrome浏览器试图阻止人们使用CSS属性选择器来窃取随机数,而Firefox则落后于他们的领先地位。
(您还会注意到,如果您打开控制台,Chrome浏览器已使用空的nonce
属性替换了DOM中的完整现时值)。
请参阅:https://www.chromestatus.com/features/5685968463986688,https://bugs.chromium.org/p/chromium/issues/detail?id=680419