Перейти к содержанию

Наличие заголовка ответа Content Security Policy (CSPv2)

Описание

Это требование подразумевает, что приложение должно использовать заголовок ответа Content Security Policy (CSP) версии 2 (CSPv2) для управления тем, какие ресурсы могут загружаться и выполняться на веб-странице. CSP помогает предотвратить атаки, такие как межсайтовый скриптинг (XSS) и кликджекинг, путем ограничения источников, из которых могут загружаться скрипты, стили, изображения и другие ресурсы.

Почему это важно

  1. Защита от XSS: CSP позволяет ограничить выполнение скриптов только из доверенных источников, что значительно снижает риск XSS-атак.
  2. Контроль загрузки ресурсов: CSP позволяет контролировать, какие ресурсы могут загружаться на страницу, что помогает предотвратить загрузку вредоносного контента.
  3. Улучшение безопасности: CSP является важным инструментом для повышения общей безопасности веб-приложений и защиты данных пользователей.
  4. Соответствие стандартам: Многие стандарты безопасности требуют использования CSP для защиты веб-приложений.

Способы реализации с примерами

Настройка заголовка CSP: Убедитесь, что ваш сервер отправляет заголовок CSP с необходимыми директивами.

Пример (HTTP-заголовок):

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; img-src 'self' data:;

Пример реализации в веб-приложении (Python с Flask):

from flask import Flask, make_response

app = Flask(__name__)

@app.after_request
def add_csp_header(response):
    response.headers['Content-Security-Policy'] = (
        "default-src 'self'; "
        "script-src 'self' https://trusted.cdn.com; "
        "img-src 'self' data:;"
    )
    return response

@app.route('/')
def index():
    return "Hello, secure world!"

if __name__ == '__main__':
    app.run(ssl_context='adhoc')  # Для тестирования с HTTPS

Настройка заголовка CSP на уровне сервера: Убедитесь, что ваш веб-сервер (например, Nginx или Apache) настроен для добавления заголовка CSP.

Пример (Nginx):

server {
    listen 443 ssl;
    server_name example.com;

    add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; img-src 'self' data:;";

    location / {
        proxy_pass http://backend;
    }
}

Пример (Apache):

<VirtualHost *:443>
    ServerName example.com

    Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; img-src 'self' data:;"

    DocumentRoot /var/www/html
</VirtualHost>

Примеры уязвимого кода

# Пример уязвимого кода на Python
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Hello, insecure world!"  # Уязвимость: отсутствие заголовка CSP

if __name__ == '__main__':
    app.run()

Проблема: Отсутствие заголовка CSP может привести к уязвимостям, таким как XSS и загрузка вредоносного контента.

Причины, к которым может привести несоблюдение требования

  1. Уязвимость к атакам: Без CSP веб-приложение становится более уязвимым к XSS и другим атакам.
  2. Потеря доверия: Уязвимости могут привести к утечке данных и потере доверия со стороны пользователей.
  3. Проблемы с соответствием: Несоблюдение стандартов безопасности может привести к юридическим последствиям и штрафам.

Рекомендации

  • Убедитесь, что все HTTP-ответы содержат заголовок CSP с необходимыми директивами.
  • Регулярно проверяйте и обновляйте настройки CSP в соответствии с последними стандартами безопасности.
  • Проводите аудит кода и конфигураций серверов на предмет отсутствия заголовка CSP.
  • Обучите команду разработчиков важности использования CSP для повышения защиты приложения.