W3C говорит , что есть новый атрибут в HTML5.1 называется nonce
для style
и script
которые могут быть использованы в содержании политики безопасности веб - сайта.
Я погуглил об этом, но, наконец, не понял, что на самом деле делает этот атрибут и что меняется при его использовании?
script
иstyle
? Что-то вроде бана хотлинка?Ответы:
nonce
Атрибут позволяет «белый список» некоторые встроенныеscript
иstyle
элементов, избегая использования НСПunsafe-inline
директивы (который позволил бы все инлайнscript
/style
), так что вы по- прежнему сохраняют ключевую CSP особенность запрещая рядныйscript
/style
в целом.Таким образом,
nonce
атрибут - это способ сообщить браузерам, что встроенное содержимое определенного скрипта или элемента стиля не было введено в документ какой-либо (злонамеренной) третьей стороной, а вместо этого было намеренно помещено в документ тем, кто контролирует сервер, на котором обслуживается документ. из.https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it дает хороший пример того, как использовать
nonce
атрибут, который состоит из следующих шагов:Для каждого запроса, получаемого вашим веб-сервером для конкретного документа, пусть ваш бэкэнд генерирует случайную строку в кодировке base64 из не менее 128 бит данных из криптографически безопасного генератора случайных чисел; например,
EDNnf03nceIOfn39fn3e9h3sdfa
. Это твоя глупость.Возьмите одноразовый номер, сгенерированный на шаге 1, и для любого встроенного
script
/, которыйstyle
вы хотите внести в «белый список», заставьте свой внутренний код вставлятьnonce
атрибут в документ перед его отправкой по сети, используя этот одноразовый номер в качестве значения:Возьмите одноразовый номер, сгенерированный на шаге 1, добавьте
nonce-
к нему и заставьте свой бэкэнд сгенерировать заголовок CSP с этим среди значений исходного списка дляscript-src
илиstyle-src
:Таким образом, механизм использования одноразового номера является альтернативой тому, что вместо того, чтобы ваш бэкэнд генерировал хэш содержимого встроенного
script
илиstyle
вы хотите разрешить, а затем указывал этот хеш в соответствующем списке источников в вашем заголовке CSP.Обратите внимание: поскольку браузеры не (не могут) проверять, что значение nonce отправлено изменения между запросами страницы, возможно - хотя и совершенно нецелесообразно - пропустить 1 выше и не заставить серверную часть делать что-либо динамически для nonce, и в этом случае вы можно просто поместить
nonce
атрибут со статическим значением в источник HTML вашего документа и отправить статический заголовок CSP с тем же значением nonce.Но причина, по которой вы не хотите использовать статический одноразовый номер таким образом, заключается в том, что это в значительной степени нарушит всю цель использования одноразового номера с самого начала - потому что, если бы вы использовали такой статический одноразовый номер, в этот момент вы могли бы просто использовать
unsafe-inline
.источник
nonce
атрибута, если вам абсолютно не нужно его использовать, не делайте этого. На самом деле это предназначено только для случаев, когда по какой-то причине вы не можете (пока) избавиться от некоторого встроенного скрипта или содержимого стиля из определенного документа (но его следует удалить позже). Поэтому, если по какой-то причине вы застряли с необходимостью сохранять встроенный скрипт и содержимое стиля, то тем временем вы можете по крайней мере использовать механизм nonce, чтобы позволить браузерам проверить, что они в порядке. В противном случае вы просто должны полностью использовать ПЕС , как на самом деле предназначены, и не допускать любому инлайн - скрипт , или стиль элементов<script type="text/javascript" nonce>
и<style type="text/css" nonce>