nonce
Атрибут дозволяє «білий список» деякі вбудовані script
і style
елементів, уникаючи використання НСП unsafe-inline
директиви (який дозволив би все інлайн script
/ style
), так що ви по- , як і раніше зберігають ключову CSP особливість забороняючи рядний script
/ style
в цілому.
Таким чином, nonce
атрибут - це спосіб повідомляти браузерам, що вбудований вміст певного сценарію чи стильового елемента не був введений в документ деякими (зловмисними) сторонніми сторонами, а замість цього був навмисно введений у документ тим, хто контролює сервер, який подає документ. з.
https://developers.google.com/web/fundamentals/security/csp/#if_you_absgether_must_use_it дає хороший приклад використання nonce
атрибута, який відповідає наступним крокам:
Для кожного запиту, який ваш веб-сервер отримує для певного документа, попросіть ваш сервер створити випадкову базову 64-кодову рядок щонайменше з 128 біт даних із криптографічно захищеного генератора випадкових чисел; наприклад, EDNnf03nceIOfn39fn3e9h3sdfa
. Це твоє поняття.
Візьміть нонсенс, сформований на кроці 1, і для будь-якого вбудованого script
чи style
списку, який ви хочете "додати до списку", змусьте ваш код резервного копіювання вставити nonce
атрибут у документ до того, як він буде надісланий по дроту, з таким значенням, як значення:
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
Візьміть одноразовий номер згенерований на кроці 1, забезпечите nonce-
його, і зробити свій бекенд генерувати ПЕС заголовок з , що серед значень вихідного списку для script-src
або style-src
:
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
Таким чином, механізм використання nonce є альтернативою замість того, щоб ваш бекенд генерував хеш вмісту вбудованого файлу script
або style
ви хочете дозволити, а потім вказати цей хеш у відповідному списку джерел у заголовку CSP.
Зауважте, що оскільки браузери не можуть (не можуть) перевірити, чи не надсилається значення надісланого значення між запитами на сторінку, можна пропустити 1 вище і не дати вашому бекенду робити динамічно нічого, і в цьому випадку ви можна просто помістити nonce
атрибут зі статичним значенням у джерело HTML вашого документа та надіслати статичний заголовок CSP з тим самим значенням, що не має значення.
Але причина, по якій ви не хочете використовувати статичний поняття таким чином, полягає в тому, що це, в значній мірі, переможе всю ціль використання нонсету для початку, тому що, якби ви використовували статичний не так, в цей момент ви також можете просто використовувати unsafe-inline
.