Spec-Zone.ru › HTTP

CSP: style-src

CSP: style-src

Директива HTTP Content-Security-Policy (CSP) style-src определяет допустимые источники для таблиц стилей.

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

Синтаксис

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

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

Источники

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

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

Примеры

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

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

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

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

<link href="https://not-example.com/styles/main.css" rel="stylesheet" />

<style>
  #inline-style {
    background: red;
  }
</style>

<style>
  @import url("https://not-example.com/styles/print.css") print;
</style>

а также стили, загруженные с помощью заголовка Link:

Link: <https://not-example.com/styles/stylesheet.css>;rel=stylesheet

Атрибуты встроенного стиля также заблокированы:

<div style="display:none">Foo</div>

А также стили, которые применяются в JavaScript, задавая атрибут style напрямую или задавая cssText:

document.querySelector('div').setAttribute('style', 'display:none;');
document.querySelector('div').style.cssText = 'display:none;';

Однако свойства стилей, которые задаются непосредственно на свойстве style элемента, не будут заблокированы, что позволит пользователям безопасно изменять стили через JavaScript:

document.querySelector('div').style.display = 'none';

Эти типы манипуляций можно предотвратить, запретив JavaScript с помощью директивы CSP script-src.

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

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

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

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

Вышеуказанная политика безопасности контента разрешит встроенные стили, такие как элемент <style>, и атрибут style любого элемента:

<style>
  #inline-style {
    background: red;
  }
</style>

<div style="display:none">Foo</div>

Можно использовать источник nonce, чтобы разрешить только определённые встроенные блоки стилей:

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

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

<style nonce="2726c7f26c">
  #inline-style {
    background: red;
  }
</style>

В качестве альтернативы можно создать хеши из встроенных стилей. CSP поддерживает sha256, sha384 и sha512. **Двоичная** форма хеша должна быть закодирована с помощью base64. Хеш строки можно получить в командной строке с помощью программы openssl:

echo -n "#inline-style { background: red; }" | openssl dgst -sha256 -binary | openssl enc -base64

Можно использовать источник хеша, чтобы разрешить только определенные встроенные блоки стилей:

Content-Security-Policy: style-src 'sha256-ozBpjL6dxO8fsS4u6fwG1dFDACYvpNxYeBA6tzR+FY8='

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

<style>
  #inline-style {
    background: red;
  }
</style>

Небезопасные выражения стилей

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

  • CSSStyleSheet.insertRule()
  • CSSGroupingRule.insertRule()
  • CSSStyleDeclaration.cssText

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

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

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

Рабочий стол Мобильные устройства
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet
style-src
25
14
23
Нет
15
7
Да
Да
23
Да
7
Да

См. также

  • Content-Security-Policy
  • style-src-elem
  • style-src-attr
  • Link заголовок
  • <style>, <link>
  • @import
  • CSSStyleSheet.insertRule()
  • CSSGroupingRule.insertRule()
  • CSSStyleDeclaration.cssText

© 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/style-src

Spec-Zone.ru

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