HTML Diff
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>