Какова цель атрибута HTML "nonce" для элементов скрипта и стиля?
W3C говорит, что в HTML5 есть новый атрибут.1 крикнул nonce
на style
и script
это может использоваться политикой безопасности контента веб-сайта.
Я googled об этом, но, наконец, не понял, что на самом деле этот атрибут делают и что меняется при его использовании?
1 ответов
на nonce
атрибут позволяет "белый список" некоторые встроенные script
и style
элементы, избегая при этом использования CSP unsafe-inline
директива (которая позволит все inline script
/style
), так что вы все еще сохраняете ключевую функцию CSP запрета inline script
/style
в целом.
так nonce
атрибут-это способ сообщить браузерам, что встроенное содержимое определенного скрипта или элемента стиля не было введено в документ некоторые (злонамеренные) третьи лица, но вместо этого были помещены в документ намеренно тем, кто контролирует сервер, с которого подается документ.
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it дает хороший пример того, как использовать nonce
атрибут, который сводится к следующим шагам:
для каждого запроса, который ваш веб-сервер получает для определенного документа, у вас есть бэкэнд генерируйте случайную строку с кодировкой base64 не менее 128 бит данных из криптографически безопасного генератора случайных чисел; например,
EDNnf03nceIOfn39fn3e9h3sdfa
. Это твое дело.-
возьмите nonce, созданный на шаге 1, и для любого встроенного
script
/style
вы хотите "белый список", сделайте свой бэкэнд-код вставитьnonce
атрибут в документ, прежде чем он будет отправлен по проводу, с этим nonce в качестве значения:<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
-
возьмите nonce созданный на шаге 1, добавьте
nonce-
к нему и сделайте свой бэкэнд генерировать заголовок CSP с тем, что среди значений исходного списка дляscript-src
илиstyle-src
:Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
таким образом, механизм использования nonce является альтернативой вместо того, чтобы ваш бэкэнд генерировать хэш содержимого встроенного script
или style
вы хотите разрешить, а затем указать этот хэш в соответствующем списке источников в заголовке CSP.
отметим, что браузеры не (не могут) проверить, что значение nonce отправило изменения между запросами страницы, возможно-хотя и совершенно нецелесообразно-пропустить 1 выше и не заставлять ваш бэкэнд делать что-либо динамически для nonce, в этом случае вы можете просто поставить nonce
атрибут со статическим значением в источник HTML вашего документа и отправьте статический заголовок CSP с тем же значением nonce.
но почему ты не хочешь использовать статический код таким образом, это поражение всей цель использования nonce вообще для начала-потому что, если вы должны были использовать статический nonce, как это, в этот момент Вы могли бы просто использовать unsafe-inline
.