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, следующие методы будут заблокированы и не будут иметь никакого эффекта:
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
Да |
См. также
© 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