Размещение статических файлов (изображений, CSS, JS) в CDN позволяет ускорить загрузку сайта, но требует строгой настройки правил доступа, чтобы публичные ресурсы не давали доступ к приватным данным. Основная задача — разделить публичный и приватный контент на уровне доменных имен и настроить соответствующие заголовки безопасности.

Как настроить CDN для статики, не нарушая политики конфиденциальности и безопасности приватных файлов

Настройка CDN начинается с архитектурного решения: физическое или логическое разделение контента. Приватные файлы (личные данные пользователей, документы, внутренние отчеты) никогда не должны размещаться в той же директории или поддомене, что и публичная статика.

Рекомендуемая практика: использовать отдельный домен для приватного контента (например, private.yoursite.com) и другой — для публичного (static.yoursite.com). Это позволяет применять разные политики безопасности к каждому ресурсу.

В конфигурации CDN для публичного поддомена необходимо настроить правила доступа. Ключевой заголовок Access-Control-Allow-Origin должен принимать значение * только для truly публичных ресурсов, которые не содержат персональных данных. Для всех остальных ресурсов этот заголовок следует явно ограничивать конкретными доменами-партнерами или отключать (оставить пустым), чтобы предотвратить кросс-доменный доступ.

Для приватного поддомена заголовок Access-Control-Allow-Origin должен содержать только ваш основной домен сайта и, при необходимости, домены авторизованных администраторов. Использование значения * здесь недопустимо.

Почему стандартные правила CORS и заголовки безопасности критичны при работе с CDN

Протокол CORS (Cross-Origin Resource Sharing) позволяет браузеру разрешать запросы к ресурсам на других доменах. Если настроить этот протокол неправильно, злоумышленник может через свой сайт получить доступ к файлам вашего CDN.

Стандартные настройки многих CDN по умолчанию могут быть слишком открытыми. Например, если заголовок Access-Control-Allow-Origin установлен как *, любой сайт сможет читать содержимое ваших файлов через JavaScript.

Заголовки безопасности, такие как Content-Security-Policy (CSP) и Strict-Transport-Security (HSTS), дополняют защиту CORS. CSP ограничивает источники, из которых браузер может загружать ресурсы, а HSTS гарантирует, что соединение всегда идет по HTTPS, исключая перехват данных.

Игнорирование этих настроек приводит к утечке приватных данных через механизм «читания» (read-only access), даже если файлы нельзя скачать напрямую. Это критично при работе с персональными данными согласно 152-ФЗ.

Шаги по настройке правил доступа (Access-Control-Allow-Origin) для публичных ресурсов

Шаг 1: Определите список доменов, которым разрешен доступ. Для публичной статики это обычно только ваш основной домен и, возможно, несколько партнерских сайтов.

Шаг 2: В панели управления CDN создайте правило для заголовка Access-Control-Allow-Origin. Укажите конкретные Origin-заголовки через запятую (например, https://yoursite.com, https://partner-site.com).

Шаг 3: Проверьте отсутствие значения * в этом заголовке для публичных ресурсов, содержащих чувствительную информацию. Если файл может быть использован как часть атаки, лучше отключить CORS полностью или ограничить его.

Шаг 4: Настройте правила для разных типов контента. Изображения и CSS могут иметь более широкие правила (если они не содержат метаданных с данными), но JS-скрипты и API-ответы должны быть строго защищены.

Изоляция приватных данных: использование разных доменов или поддоменов для статических файлов

Техническая реализация изоляции строится на принципе наименьших привилегий. Создайте отдельный поддомен, например, secure.yoursite.com, исключительно для хранения и доставки приватных файлов.

В DNS-записях этого поддомена укажите IP-адрес CDN-провайдера, но в настройках самого CDN запретите публичный доступ. Разместите там только файлы, которые не являются частью публичного контента сайта.

Используйте разные пути доступа: /public/ для открытой статики и /private/ или отдельный домен для закрытых данных. Это позволяет применять разные политики кэширования и безопасности.

Важно: даже если файл лежит в папке /private/, доступ к нему должен контролироваться через заголовки CORS и аутентификацию, если это требуется бизнес-логикой.

Настройка заголовков безопасности (CSP, HSTS) в конфигурации CDN-провайдера

Content-Security-Policy (CSP): Настройте директиву default-src, чтобы разрешать загрузку ресурсов только с вашего домена. Добавьте директивы script-src и style-src, указывая конкретные источники.

Strict-Transport-Security (HSTS): Включите этот заголовок для всех ответов CDN, чтобы браузеры всегда использовали HTTPS. Это предотвращает атаки типа «человек посередине» и перехват данных при передаче.

X-Content-Type-Options: no-sniff: Добавьте этот заголовок, чтобы браузер не угадывал тип контента по имени файла (например, не считал .txt как HTML).

Referrer-Policy: strict-origin-when-cross-origin: Ограничите передачу информации о URL страницы в запросах к другим доменам, чтобы снизить риск утечки данных.

Проверка корректности работы CDN с помощью инструментов аудита и тестовых запросов

Используйте инструменты вроде browser.dev или curl для проверки заголовков ответов от CDN. Запустите запрос к публичному файлу и убедитесь, что Access-Control-Allow-Origin содержит только разрешенные домены.

Проверьте приватный поддомен: убедитесь, что заголовок Access-Control-Allow-Origin отсутствует или содержит только ваш домен.

Тестируйте сценарий атаки: попробуйте открыть файл через iframe на стороннем сайте. Если браузер блокирует загрузку из-за CORS — настройка верная.

Проверьте работу HSTS: убедитесь, что сайт открывается только по HTTPS и нет ошибок смешанного контента.

Ограничения CDN при работе с персональными данными согласно 152-ФЗ и GDPR

Согласно 152-ФЗ, обработка персональных данных требует согласия субъекта. Размещение таких данных на публичном CDN без защиты нарушает закон.

CDN может выступать как оператор или обработчик данных. Необходимо прописать это в политике конфиденциальности и получить согласие пользователя на передачу данных третьим лицам (провайдеру CDN).

GDPR требует обеспечения безопасности данных при передаче. Использование шифрования (HTTPS) и строгих правил доступа является обязательным требованием.

Если CDN-провайдер находится в другой юрисдикции, убедитесь, что он соответствует требованиям локального законодательства о защите данных.

Рекомендации по выбору стратегии кэширования для чувствительных типов контента

Для приватных файлов не используйте агрессивное кэширование. Настройте заголовок Cache-Control: no-store или private, чтобы данные не сохранялись в публичных кэшах CDN.

Для публичной статики (картинки, шрифты) можно использовать long cache с параметром max-age=31536000, но только если файлы не содержат персональных данных.

Используйте версии файлов (например, через хеш-сумму в имени файла), чтобы избежать проблем с кэшированием при обновлении контента.

Регулярно пересматривайте стратегию кэширования после изменений в структуре сайта или добавления новых типов контента.

Вопросы и ответы

Можно ли использовать один домен CDN для всех файлов, если разделить их папками?

Нет. Даже при разделении папками на одном домене необходимо применять разные политики безопасности (CORS, заголовки) для публичных и приватных ресурсов. Лучше использовать отдельные поддомены для полной изоляции.

Как часто нужно проверять настройки CDN?

Проверку следует проводить после каждого изменения конфигурации, добавления новых файлов или обновления провайдера. Также рекомендуется регулярный аудит безопасности раз в квартал.

По теме