71 added
3 removed
Original
2026-01-01
Modified
2026-02-26
1
-
<p>CSP (Content Security Policy) - это механизм, который позволяет веб-разработчикам контролировать, какие ресурсы могут быть загружены на страницу. С помощью CSP можно запретить загрузку определенных типов ресурсов, таких как скрипты, шрифты или стили, а также ограничить использование некоторых функций, таких как eval() или URL-сценарии. Это помогает повысить безопасность веб-приложения и предотвратить атаки на уязвимости, связанные с этими функциями.</p>
1
+
<p>CSP - это политика безопасности, которая задает допустимые источники загрузки данных для веб-страниц. Механизм ограничивает выполнение кода и получение ресурсов, не входящих в перечень доверенных доменов, что снижает риск XSS и связанных атак. Стандарт формирует набор правил, который браузер применяет при обработке страниц. Любой элемент, не соответствующий политике, блокируется.</p>
2
-
<p>2 года назад</p>
2
+
<h2>Назначение и принципы работы CSP</h2>
3
-
<p>Елена Редькина</p>
3
+
<p>Основная задача CSP - устранение неконтролируемого доступа к сторонним ресурсам. Несмотря на действие политики одинакового источника, большинство сайтов подключают внешние скрипты, изображения, аналитические сервисы и CDN. Это открывает возможность внедрения вредоносного контента. CSP формирует перечень разрешенных доменов и указывает браузеру, какие типы данных можно загружать и исполнять.</p>
4
+
<p>Политика передается через HTTP-заголовок Content-Security-Policy. На странице могут быть объявлены отдельные директивы, каждая из которых определяет разрешенные источники для конкретного типа контента. Если явно прописанных правил нет, применяется значение из резервной директивы.</p>
5
+
<p>CSP использует принцип запрета по умолчанию. Браузер выполняет только то, что явно разрешено. Это исключает загрузку ресурсов из непроверенных источников и минимизирует влияние внедренного кода.</p>
6
+
<h2>Основные директивы CSP</h2>
7
+
<p>Директивы формируют независимые наборы разрешений. Каждая отвечает за определенный тип контента:</p>
8
+
<ul><li><p>img-src - изображения;</p>
9
+
</li>
10
+
<li><p>media-src - видео, аудио и анимация;</p>
11
+
</li>
12
+
<li><p>script-src - скрипты и сценарии;</p>
13
+
</li>
14
+
<li><p>frame-src - встраиваемые элементы и фреймы;</p>
15
+
</li>
16
+
<li><p>default-src - резервный список источников, используемый при отсутствии частных правил.</p>
17
+
</li>
18
+
</ul><p>Директивы могут включать домены, поддомены или конкретные URL. Перечень допускает использование операторов и специальных значений. Каждая часть конфигурации применяется только к своему типу контента. Значения из одной директивы не наследуются другой.</p>
19
+
<h2>Базовые правила указания источников</h2>
20
+
<p>CSP допускает использование ключевых слов:</p>
21
+
<ul><li><p>none - полный запрет загрузки;</p>
22
+
</li>
23
+
<li><p>self - разрешение только текущему домену;</p>
24
+
</li>
25
+
<li><p>unsafe-inline - включение инлайновых стилей, скриптов и обработчиков событий;</p>
26
+
</li>
27
+
<li><p>unsafe-eval - разрешение динамического выполнения кода.</p>
28
+
</li>
29
+
</ul><p>Инлайновые конструкции считаются потенциально опасными, поэтому без явного разрешения они блокируются. Отключение динамических вызовов способствует предотвращению подмены сценариев и внедрения вредоносных функций.</p>
30
+
<p>Для проверки политики без фактического ограничения работы сайта применяется заголовок Content-Security-Policy-Report-Only. В этом режиме нарушения фиксируются и отправляются на сервер, но не приводят к блокировке.</p>
31
+
<h2>Примеры конфигураций CSP</h2>
32
+
<p>Простое ограничение источников только основным доменом:</p>
33
+
<p>Разрешение доверенному домену и всем его поддоменам:</p>
34
+
<p>Одновременный контроль нескольких типов контента:</p>
35
+
<p>В этом случае изображения доступны из любых источников, медиафайлы - только с указанных доменов, а выполнение скриптов ограничено одним доверенным сервером.</p>
36
+
<h2>Атаки, от которых защищает CSP</h2>
37
+
<h3>XSS (межсайтовый скриптинг)</h3>
38
+
<p>XSS основан на внедрении сценария, выполняемого от имени доверенного источника. Если сайт загружает контент без проверки, вредоносный код выполняется напрямую. CSP исключает загрузку незаявленных ресурсов и предотвращает выполнение сторонних скриптов.</p>
39
+
<h3>Перехват данных при передаче</h3>
40
+
<p>Вредоносный код может вмешиваться в сетевую активность, перехватывая потоки данных. CSP ограничивает использование ненадежных протоколов и требует передачи cookie в безопасном режиме. Стандарт усиливается заголовком HSTS, который принудительно переводит соединение в HTTPS.</p>
41
+
<h2>Типы содержимого, представляющие риск</h2>
42
+
<p>Опасность исходит не только от данных, но и от способов их обработки. Контент может функционировать через отдельные скрипты и стили, а злоумышленники используют эти механизмы как транспорт для внедрения кода. Условно выделяются группы потенциально опасных элементов:</p>
43
+
<ul><li><p>скрипты - автоматизация действий на странице;</p>
44
+
</li>
45
+
<li><p>изображения - файлы отображаются с использованием сценариев загрузки;</p>
46
+
</li>
47
+
<li><p>стили - описание визуальных параметров, через которые можно нарушить работу интерфейса;</p>
48
+
</li>
49
+
<li><p>медиа - воспроизведение управляется обработчиками;</p>
50
+
</li>
51
+
<li><p>шрифты - текстовые файлы, способные содержать вредоносные вставки;</p>
52
+
</li>
53
+
<li><p>объекты и плагины - расширения сторонних сервисов;</p>
54
+
</li>
55
+
<li><p>фреймы - внешние страницы в составе основной страницы;</p>
56
+
</li>
57
+
<li><p>манифесты - ресурсы веб-приложений, включающие сторонние зависимости.</p>
58
+
</li>
59
+
</ul><p>Каждый тип данных сопровождается отдельным набором скриптов и стилей, поэтому ограничения должны быть точечными.</p>
60
+
<h2>Уязвимости CSP и причины обхода политики</h2>
61
+
<p>Несмотря на строгий механизм контроля, CSP может быть обойден при некорректной реализации. Большинство проблем связано не со стандартом, а с неверной настройкой.</p>
62
+
<h3>Выполнение JavaScript внутри автоматически созданных фреймов</h3>
63
+
<p>Когда изображение или текстовый документ открывается браузером, он преобразует его в HTML-страницу, размещенную во iframe. Такой документ не содержит собственной политики безопасности. Встроенный скрипт выполняется без ограничений, создавая угрозу.</p>
64
+
<h3>Отсутствие CSP на страницах с ошибками</h3>
65
+
<p>Часто политики применяют только к рабочим страницам. Если злоумышленник внедряет контент в страницу ошибки 404 или 4xx, браузер может выполнить вредоносный сценарий. Политика должна распространяться на весь сайт.</p>
66
+
<h3>Загрузка сценариев с облачных хранилищ</h3>
67
+
<p>Некоторые проекты используют файлообменники как источник кода или данных. Если в облаке размещен вредоносный файл, сайт загрузит его как доверенный ресурс. Это нарушает принцип контроля происхождения контента.</p>
68
+
<h3>Неполное покрытие ресурсов</h3>
69
+
<p>Если в политике разрешен широкий перечень доменов или используются опасные ключевые слова, вероятность обхода повышается. Ошибка в одном значении может отменить защиту.</p>
70
+
<h2>Значение корректного внедрения CSP</h2>
71
+
<p>Стандарт надежен при строгом соблюдении правил. Грамотная конфигурация исключает внедрение сторонних скриптов, ограничивает неконтролируемые источники контента и снижает риск атаки через ресурсы, участвующие в построении страницы. CSP работает только в комплексе с другими механизмами - безопасными протоколами, корректной обработкой пользовательских данных и регулярным аудитом конфигураций.</p>