Как можно настроить политику безопасности контента (Content Security Policy) с помощью компонента?

Я использую компонент <a href="https://github.com/hyperia-sk/yii2-secure-headers" rel="nofollow">https://github.com/hyperia-sk/yii2-secure-headers</a>, но не могу разобраться, какие настройки от меня требуются. В файле frontend/config/main.php в конфигурации указано следующее: <br/> <br/> <pre><code class="php">'bootstrap' =&gt; ['log', 'headers'],

'components' =&gt; [
 ....
'headers' =&gt; [
            'class' =&gt; '\hyperia\security\Headers',
            'upgradeInsecureRequests' =&gt; true,
            'blockAllMixedContent' =&gt; true,
            'requireSriForScript' =&gt; false,
            'requireSriForStyle' =&gt; false,
            'xssProtection' =&gt; true,
            'xFrameOptions' =&gt; 'DENY',
            'xPoweredBy' =&gt; 'Hyperia',
            'cspDirectives' =&gt; [
                'connect-src' =&gt; "'self'",
                'font-src' =&gt; "'self' https://fonts.gstatic.com",
                'frame-src' =&gt; "'self'",
                'img-src' =&gt; "'self' http://p.cityadstrack.com",
                'manifest-src' =&gt; "'self'",
                'object-src' =&gt; "'self'",
                'prefetch-src' =&gt; false,
                'script-src' =&gt; "'self' https://www.googletagmanager.com https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://player.kinescope.io https://widget.cloudpayments.ru https://forms.yandex.ru https://yastatic.net",
                'style-src' =&gt; "'self' https://cdnjs.cloudflare.com https://www.googletagmanager.com",
                'media-src' =&gt; "'self'",
                'form-action' =&gt; "'self'",
                'worker-src' =&gt; "'self'",
            ],
        ]
 ....
]</code></pre> <br/> <br/> Можете ли вы объяснить, какие конкретно аспекты требует настройка и как правильно их применить?
  • 3 января 2025 г. 15:14
Ответы на вопрос 1
Политика безопасности контента (Content Security Policy, CSP) позволяет контролировать, какие источники контента могут загружаться на веб-странице. Это помогает предотвратить атаки, такие как XSS (межсайтовый скриптинг), за счет ограничения источников, из которых можно загружать скрипты, стили и другие ресурсы.

В вашем случае вы используете компонент `yii2-secure-headers`, который упрощает настройку заголовков безопасности, включая CSP. Давайте разберем ваши настройки и какие аспекты вам следует учитывать.

Вы уже указали базовые директивы CSP в параметре `'cspDirectives'`. Вот краткое описание некоторых из них:

1. **'connect-src'**: Определяет, откуда можно загружать ресурсы, такие как XMLHttpRequest, WebSocket и EventSource. В вашем примере установлено значение `"'self'"`, что означает, что запросы разрешены только с вашего домена.

2. **'font-src'**: Указывает, откуда можно загружать шрифты. У вас разрешено загружать шрифты с вашего домена и с `https://fonts.gstatic.com`.

3. **'frame-src'**: Определяет источники, из которых можно загружать фреймы. У вас установлено значение `"'self'"`, что разрешает только загрузку фреймов с вашего домена.

4. **'img-src'**: Задает источники изображений. У вас разрешено загружать изображения только с вашего домена и с `http://p.cityadstrack.com`.

5. **'manifest-src'** и **'object-src'**: Запрещают загрузку манифестов и объектов (например, Flash) соответственно, разрешая только ресурсы с вашего домена.

6. **'script-src'**: Определяет источники, откуда можно загружать скрипты. Вы указали множество URL, откуда разрешено загружать скрипты вместе с вашим доменом. Обратите внимание, что это может открыть ваш сайт для XSS-атак, если вы не уверены в надежности всех перечисленных источников.

7. **'style-src'**: Указывает, откуда можно загружать стили. Вы также можете добавить `unsafe-inline`, если используете встроенные стили, но это может значительно снизить защиту.

8. **'media-src'**: Определяет источники для мультимедиа (аудио и видео).

9. **'form-action'**: Указывает, откуда можно отправлять формы. В вашем случае разрешено отправлять формы только на ваш домен.

10. **'worker-src'**: Определяет источники для веб-воркеров. У вас разрешено использовать только ваш домен.

### Рекомендации по настройке:

1. **Минимизация доверенных источников**: Старайтесь использовать как можно меньше сторонних источников, особенно в случае `script-src` и `style-src`.

2. **Использование `nonce` или `hash`**: Для встроенных скриптов и стилей (inline scripts/styles) используйте `nonce` или `hash`. Это повысит уровень безопасности, так как позволит вашему коду выполняться, даже если не все inline-коды будут разрешены.

3. **Тестирование**: После изменений в CSP протестируйте вашу страницу в различных браузерах и инструментах разработчика, чтобы убедиться, что ничего не сломалось, и при необходимости скорректируйте политику.

4. **Логи и отчеты**: Рассмотрите возможность включения отчётов о политике CSP с помощью директивы `report-uri` для отслеживания нарушений и анализа.

### Общая структура:

Ваш код выглядит хорошо для начала. Если вы хотите уменьшить риск XSS-атак, рекомендуется использовать дополнительные механизмы, такие как `nonce`, особенно для `script-src` и `style-src`.

Пример использования `nonce` для скриптов:
```php
'cspDirectives' => [
    'script-src' => "'self' 'nonce-random1234'",
],
```
Где `'nonce-random1234'` — это уникальный и динамически генерируемый токен для каждого запроса для повышения безопасности.

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