Какова цель атрибута 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.