Spec-Zone.ru › HTTP

CSP: script-src

CSP: script-src

Директива HTTP Content-Security-Policy (CSP) script-src определяет допустимые источники для JavaScript. Это включает не только URL-адреса, загружаемые непосредственно в элементы <script>, но и такие вещи, как обработчики событий встроенного сценария (onclick) и XSLT-стили, которые могут вызывать выполнение сценария.

Версия CSP 1
Тип директивы Директива Fetch
default-src падение Да. Если эта директива отсутствует, пользовательский агент будет искать директиву default-src .

Синтаксис

Для политики script-src может быть разрешено одно или несколько источников:

Content-Security-Policy: script-src <source>;
Content-Security-Policy: script-src <source> <source>;

Источники

<source> может быть любым из значений, перечисленных в Значения источников CSP.

Обратите внимание, что этот же набор значений может использоваться во всех директивах fetch (и в ряде других директив).

Примеры

Случай нарушения

Учитывая этот заголовок CSP:

Content-Security-Policy: script-src https://example.com/

следующий сценарий заблокирован и не будет загружен или выполнен:

<script src="https://not-example.com/js/library.js"></script>

Обратите внимание, что обработчики событий встроенного сценария также заблокированы:

<button id="btn" onclick="doSomething()"></button>

Вы должны заменить их вызовами addEventListener:

document.getElementById("btn").addEventListener("click", doSomething);

Встроенный небезопасный сценарий

Примечание: Запрещение встроенных стилей и встроенных сценариев — это одно из самых больших достижений в области безопасности, предоставляемых CSP. Однако, если вам абсолютно необходимо его использовать, существуют несколько механизмов, которые позволят это сделать.

Чтобы разрешить встроенные сценарии и встроенные обработчики событий, 'unsafe-inline', можно указать источник с номером или источником с хешем, который соответствует встроенному блоку.

Content-Security-Policy: script-src 'unsafe-inline';

Вышеприведенная политика безопасности контента позволит встроенным элементам <script>

<script>
  const inline = 1;
  // …
</script>

Вы можете использовать источник с номером, чтобы разрешить только определенные встроенные блоки сценариев:

Content-Security-Policy: script-src 'nonce-2726c7f26c'

Вам нужно будет установить тот же номер в элементе <script>:

<script nonce="2726c7f26c">
  const inline = 1;
  // …
</script>

В качестве альтернативы, вы можете создавать хеши из своих встроенных сценариев. CSP поддерживает sha256, sha384 и sha512.

Content-Security-Policy: script-src 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8='

При создании хеша не включайте теги <script>, и обратите внимание, что регистр и пробелы имеют значение, включая ведущие или хвостовые пробелы.

<script>
  const inline = 1;
</script>

Небезопасные выражения eval

Выражение источника 'unsafe-eval' контролирует несколько методов выполнения сценариев, которые создают код из строк. Если у страницы есть заголовок CSP и 'unsafe-eval' не указан с директивой script-src, следующие методы заблокированы и не будут иметь никакого эффекта:

  • eval()
  • Function()
  • При передаче строковой литералы в методы, такие как: setTimeout("alert(\"Hello World!\");", 500);
    • setTimeout()
    • setInterval()
    • window.setImmediate
  • window.execScript() Нестандартный (только IE < 11)

Небезопасное выполнение WebAssembly

Выражение источника 'wasm-unsafe-eval' контролирует выполнение WebAssembly. Если у страницы есть заголовок CSP и 'wasm-unsafe-eval' не указан в директиве script-src, WebAssembly заблокирован от загрузки и выполнения на странице. Выражение источника 'wasm-unsafe-eval' более конкретно, чем 'unsafe-eval', которое разрешает как компиляцию (и инстанцирование) WebAssembly, так и, например, использование операции eval в JavaScript. Если ключевое слово 'unsafe-eval' используется, то это переопределяет любое вхождение 'wasm-unsafe-eval' в политике CSP.

Content-Security-Policy: script-src 'wasm-unsafe-eval'

strict-dynamic

Выражение источника 'strict-dynamic' указывает, что доверие, явно предоставленное сценарию, присутствующему в разметке, путем добавления к нему номеров или хешей, будет распространяться на все сценарии, загружаемые этим корневым сценарием. В то же время любые списки разрешений или выражения источников, такие как 'self' или 'unsafe-inline', будут игнорироваться.

Например, политика, такая как script-src 'strict-dynamic' 'nonce-R4nd0m' https://allowlisted.example.com/ , позволила бы загружать корневой сценарий с <script nonce="R4nd0m" src="https://example.com/loader.js"> и распространять это доверие на любой сценарий, загруженный loader.js, но не разрешать загрузку сценариев из https://allowlisted.example.com/ , если они не сопровождаются номером или не загружены из доверенного сценария.

Content-Security-Policy: script-src 'strict-dynamic' 'nonce-someNonce'

Или:

Content-Security-Policy: script-src 'strict-dynamic' 'sha256-base64EncodedHash'

Возможно развернуть strict-dynamic в обратной совместимости, без необходимости определения браузера. Политика:

Content-Security-Policy: script-src 'unsafe-inline' https: 'nonce-abcdefg' 'strict-dynamic'

будет действовать как 'unsafe-inline' https: в браузерах, поддерживающих CSP1, https: 'nonce-abcdefg' в браузерах, поддерживающих CSP2, и 'nonce-abcdefg' 'strict-dynamic' в браузерах, поддерживающих CSP3.

Спецификации

Спецификация
Политика безопасности контента уровня 3
# directive-script-src

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet
script-src
25
14
23
Нет
15
7
Да
Да
23
Да
7
Да
external_scripts
59
≤79
Нет
Нет
46
Нет
59
59
Нет
43
Нет
7.0
wasm-unsafe-eval
97
97
102
Нет
83
16
97
97
102
68
16
18.0

См. также

  • Content-Security-Policy
  • Sources
  • <script>
  • script-src-elem
  • script-src-attr

© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API