代码之家  ›  专栏  ›  技术社区  ›  Titus

getAttribute('nonce')适用于Firefox,但不适用于Chrome

  •  1
  • Titus  · 技术社区  · 6 年前

    <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(最新版本)中,我得到: "" (空白字符串)我没想到。

    如果我用实验的nonce属性得到nonce( HTMLElement.nonce ),我得到以下值:

    • 在Firefox(最新版本)中,我得到: null
    • 在Chrome(最新版本)中,我得到: 35609alksdgx30q型

    const nonce = currentScript.nonce || currentScript.getAttribute('nonce') || false
    

    我的问题是, 为什么不呢 getAttribute('nonce') 始终返回nonce值? 我怀疑这是一个安全问题,但是为什么Firefox在使用时不返回一个空字符串呢 ?


    是的,技术上我知道 nonce 用于内联脚本,是此脚本由站点的CSP策略清除。我得去拿

    1 回复  |  直到 6 年前
        1
  •  0
  •   Sora2455    6 年前

    Chrome正试图阻止人们使用CSS属性选择器来过滤nonce,而Firefox则落后于他们。

    (如果打开控制台,您还会注意到Chrome已经将DOM中的full nonce值替换为空值 nonce

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