Реализация HTTP Strict Transport Security (HSTS) в NGINX

Понимание HSTS

HTTP Strict Transport Security (HSTS) — это важный протокол безопасности веб-сайтов. Он обеспечивает, чтобы соединения с доменом осуществлялись исключительно по HTTPS. Это снижает риски, такие как атаки типа «человек посередине», и обеспечивает целостность и конфиденциальность данных, передаваемых в сети. Когда пользователь пытается получить доступ к сайту через HTTP, HSTS автоматически обновляет соединение до HTTPS.

Настройка HSTS в NGINX

Чтобы настроить HSTS в NGINX, необходимо обновить блок сервера в файле конфигурации NGINX. Этот файл обычно находится в /etc/nginx/nginx.conf или в конфигурациях, специфичных для сайта, в /etc/nginx/sites-available/. Обновление включает добавление заголовка, указывающего браузеру всегда использовать HTTPS для указанного домена.

В блоке сервера для вашего домена добавьте следующую строку:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

Эта линия содержит два компонента:

  • max-age=31536000: Дайте указание браузеру помнить об использовании HTTPS для вашего сайта в течение следующих 12 месяцев.
  • includeSubDomains: применяет политику HSTS ко всем поддоменам вашего сайта для обеспечения комплексной безопасности.

Пример конфигурации NGINX с HSTS

Ваша конфигурация NGINX с заголовком HSTS может выглядеть следующим образом:

upstream my_portal {
    server 127.0.0.1:8080;
}

server {
    listen 80;
    server_name example.com;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

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

После добавления этого заголовка перезагрузите NGINX, чтобы изменения вступили в силу, с помощью sudo systemctl reload nginx или sudo nginx -s reload.

Дополнительные примеры конфигурации NGINX

Для разных сценариев ваша конфигурация NGINX с HSTS может отличаться. Вот дополнительные примеры:

Многодоменный сервер

server {
    listen 80;
    server_name example1.com example2.com;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

    location / {
        # Configuration details
    }
}

Эта конфигурация применяет HSTS к нескольким доменам, размещенным на одном сервере. Каждый указанный домен будет принудительно использовать HTTPS-соединения.

Сервер с SSL-терминацией

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/private/key;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

    location / {
        # Configuration details
    }
}

Эта настройка предназначена для серверов, обрабатывающих терминацию SSL. Она настраивает HSTS на защищенном порту (443) с указанными сертификатами SSL, усиливая защищенные соединения.

Настройка Content-Security-Policy (CSP) в NGINX

Реализация CSP в NGINX

Интеграция Content-Security-Policy (CSP) в NGINX — это стратегический шаг по повышению безопасности веб-приложений. Он включает добавление определенного заголовка в блок сервера вашего файла конфигурации NGINX. Обычно он находится в /etc/nginx/nginx.conf или в каталоге /etc/nginx/sites-available/, этот файл требует тщательного редактирования для эффективного применения CSP.

Для базовой настройки CSP добавьте следующую строку в блок сервера:

add_header Content-Security-Policy "default-src 'self';" always;

Эта директива ограничивает загрузку контента доменом веб-сайта («self»), значительно снижая риск выполнения вредоносного внешнего контента.

Пример конфигурации NGINX с CSP

Ваша конфигурация NGINX с базовой директивой CSP может выглядеть следующим образом:

upstream my_portal {
    server 127.0.0.1:8080;
}

server {
    listen 80;
    server_name example.com;
    add_header Content-Security-Policy "default-src 'self';" always;

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

Перезагрузите NGINX с помощью sudo systemctl reload nginx или sudo nginx -s reload после добавления этой директивы.

Настройка CSP для конкретных нужд

CSP может быть адаптирована для решения конкретных потребностей безопасности вашего веб-сайта. Вот расширенные конфигурации для различных сценариев:

Разрешение изображений из любого источника

add_header Content-Security-Policy "default-src 'self'; img-src *;" always;

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

Конфигурация определенных скриптов и стилей

add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trustedscript.com; style-src 'self' 'unsafe-inline';";

Этот параметр разрешает использование скриптов из вашего домена и доверенного внешнего источника вместе со встроенными стилями, обеспечивая баланс между функциональностью и безопасностью.

Изучение директив и вариантов CSP

Директивы в CSP

Директивы CSP — это правила, определяющие политику для определенных типов контента. Общие директивы включают:

  • default-src: политика по умолчанию, применяемая к большинству типов контента.
  • script-src: Управляет источниками ресурсов JavaScript.
  • style-src: указывает разрешенные источники для ресурсов CSS.
  • img-src: Управляет источниками ресурсов изображений.
  • connect-src: устанавливает политики для сетевых подключений, таких как XMLHttpRequest, WebSocket и EventSource.

Исходные выражения в CSP

Исходные выражения определяют допустимые источники для каждой директивы:

  • «none»: блокирует все источники.
  • «self»: ​​разрешает ресурсы из одного источника.
  • ‘unsafe-inline’: разрешает встроенные ресурсы, такие как стили или URL-адреса JavaScript.
  • ‘unsafe-eval’: разрешает eval()функции JavaScript и подобные методы.
  • https:: Включает ресурсы с любого HTTPS URL.
  • Настройка X-XSS-защиты в NGINX

Введение в X-XSS-защиту

X-XSS-Protection, или заголовок Cross-Site Scripting, необходим для защиты веб-приложений от атак XSS (Cross-Site Scripting). Поддерживаемый основными веб-браузерами, такими как Chrome, Internet Explorer и Safari, этот заголовок повышает веб-безопасность, предотвращая загрузку страниц при обнаружении отраженных атак XSS.