getAttribute ('nonce') работает в Firefox, но не в Chrome - PullRequest
0 голосов
/ 29 августа 2018

Учитывая, что я загружаю скрипт, как это:

<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 (последний) я получаю: "" (пустая строка), чего я не ожидаю.

Если я получаю одноразовый номер, используя экспериментальное свойство nonce ( HTMLElement.nonce ), я получу следующие значения:

  • В Firefox (последняя версия) я получаю: null как и ожидалось (поскольку свойство nonce не поддерживается Firefox)
  • В Chrome (последний) я получаю: 35609alksdgx30q, как и ожидалось.

Итак, чтобы надежно получить одноразовый номер, я должен сделать что-то вроде этого:

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

У меня вопрос: , почему getAttribute('nonce') последовательно не возвращает значение nonce? Я подозреваю, что это вопрос безопасности, но тогда почему Firefox также не возвращает пустую строку при использовании getAttribute('nonce')


Да, я знаю, технически nonce используется для встроенных сценариев, и да, этот сценарий очищается политикой CSP сайта. Я должен схватить nonce таким образом, потому что некоторые вещи были реализованы xD

1 Ответ

0 голосов
/ 01 марта 2019

Chrome пытается помешать людям использовать селекторы атрибутов CSS для эксфильтрации одноразовых номеров, а Firefox отстает от их следования.

(Если вы откроете консоль, Chrome заменил полное значение nonce в DOM пустым атрибутом nonce).

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

...