• Русский
  • Как настроить Content Security Policy (CSP)

    В этой статье описывается, как настроить Content Security Policy (CSP) для GitLab с целью устранения распространённых проблем безопасности, выявленных при проведении penetration testing.

    Применимые сценарии:

    • В отчётах penetration testing выявлены проблемы, связанные с CSP (например, отсутствующие директивы, чрезмерно разрешающие источники)
    • Укрепление безопасности инстанса GitLab

    Общие сведения

    Content Security Policy (CSP) — это HTTP-заголовок ответа, который помогает предотвратить атаки типа cross-site scripting (XSS), clickjacking и другие виды внедрения кода, контролируя, какие ресурсы браузер может загружать.

    По умолчанию GitLab включает конфигурацию CSP, однако некоторые директивы могут быть чрезмерно разрешающими (например, разрешение источников с подстановочными знаками http: и https:), что может быть отмечено в ходе penetration testing.

    Предварительные требования

    • Инстанс GitLab развернут согласно документации GitLab Instance Deployment.
    • Результаты penetration testing доступны для ознакомления (например, из OWASP ZAP).

    Настройка CSP

    Измените конфигурацию CR инстанса GitLab, чтобы включить и настроить директивы CSP.

    Замените http://gitlab.example.com на фактический внешний URL вашего инстанса GitLab.

    spec:
      helmValues:
        global:
          appConfig:
            contentSecurityPolicy:
              enabled: true
              report_only: false
              directives:
                form_action: "'self' http://gitlab.example.com"
                img_src: "'self' data: blob: http://gitlab.example.com"
                media_src: "'self' data: blob: http://gitlab.example.com"

    Описание директив

    ДирективаНазначениеРекомендация
    form_actionКонтролирует, на какие URL формы могут отправлять данные. Значение по умолчанию 'self' https: http: разрешает отправку на любые адреса.Ограничить 'self' и URL инстанса GitLab.
    img_srcКонтролирует, с каких источников могут загружаться изображения. Значение по умолчанию включает подстановочные знаки http: и https:.Ограничить 'self', data:, blob: и URL инстанса GitLab.
    media_srcКонтролирует, с каких источников могут загружаться медиафайлы (аудио/видео). Аналогичная проблема, как у img_src.Ограничить 'self', data:, blob: и URL инстанса GitLab.

    Дополнительно: удаление unsafe-eval и unsafe-inline

    Для более строгих требований безопасности можно дополнительно удалить unsafe-eval из script-src и unsafe-inline из style-src:

    spec:
      helmValues:
        global:
          appConfig:
            contentSecurityPolicy:
              enabled: true
              report_only: false
              directives:
                form_action: "'self' http://gitlab.example.com"
                img_src: "'self' data: blob: http://gitlab.example.com"
                media_src: "'self' data: blob: http://gitlab.example.com"
                script_src: "'strict-dynamic' 'self' https://www.google.com/recaptcha/ https://www.recaptcha.net"
                style_src: "'self'"

    Внимание: Удаление unsafe-eval и unsafe-inline может привести к следующим известным проблемам:

    • Выпадающие меню навигации могут отображаться некорректно (располагаться в верхней части страницы).
    • Редактирование скриптов сниппетов может работать неправильно.

    Оцените эти компромиссы с учётом требований безопасности перед применением данной конфигурации. Для тестирования политики без её принудительного применения можно использовать report_only: true.

    Проверка

    После применения конфигурации дождитесь завершения повторного развертывания инстанса GitLab, затем выполните проверку:

    1. Откройте веб-интерфейс GitLab в браузере.
    2. Откройте инструменты разработчика браузера (F12) и перейдите на вкладку Network.
    3. Просмотрите заголовки ответа любого запроса страницы и убедитесь, что заголовок Content-Security-Policy отражает настроенные директивы.
    4. Проверьте вкладку Console на наличие ошибок нарушения CSP, которые могут указывать на нарушение функциональности.