nginx:http_strict_transport_security

HTTP Strict Transport Security (HSTS)

HTTPS (HTTP, зашифрованный SSL или TLS) является неотъемлемой частью мер по обеспечению безопасности трафика на веб-сайт. Данная реализация, затрудняет перехват либо подделку трафика между пользователем и сайтом.

Когда пользователь вводит домен вручную (предоставляя имя домена без префикса http:// или https://) или следует по ссылке http://, первый запрос на сервер отправляется незашифрованным, используя простой HTTP. Большинство защищенных веб‑сайтов немедленно отправляют перенаправление для обновления пользователя до HTTPS‑соединения, но в некоторых случаях злоумышленник может провести атаку человек в середине (MITM) для перехвата первоначального HTTP‑запроса и в дальнейшем, контролировать сеанс пользователя.

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

Политика HSTS публикуется путем отправки следующего заголовка ответа HTTP с защищенного (HTTPS) сайта:

Strict-Transport-Security: max-age=31536000

Когда браузер видит такой заголовок, он понимает, что данный домен, должен быть доступен только с помощью HTTPS (SSL или TLS). Браузер кэширует эту информацию на максимальный период (обычно 31536000 секунд – это примерно 1 год).

Необязательный параметр includeSubDomains сообщает браузеру, что политика HSTS также применяется ко всем поддоменам текущего домена.

Strict-Transport-Security: max-age=31536000; includeSubDomains

Например, HTML-ответ для https://www.example.com может включать запрос к ресурсу с https://example.com, чтобы убедиться, что HSTS установлен для всех поддоменов example.com.

Настройка заголовка ответа Strict Transport Security (STS) в NGINX и NGINX Plus относительно проста:

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

Параметр always гарантирует, что заголовок будет установлен для всех ответов, включая ответы об ошибках, сгенерированные внутри сервера. Более старые версии NGINX (до версии 1.7.5 или NGINX Plus R5) не поддерживают параметр always и не устанавливают заголовок для ответов об ошибках, сгенерированных внутри сервера.

Конфигурационные блоки NGINX наследуют директивы add_header от своих вложенных блоков, поэтому директиву add_header следует поместить в блок сервера верхнего уровня. Есть одно важное исключение: если блок сам включает директиву add_header, он не наследует заголовки от вложенных блоков, и поэтому, нужно заново объявить все директивы add_header:

server {
    listen 443 ssl;
 
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
 
    # This 'location' block inherits the STS header
    location / {
        root /usr/share/nginx/html;
    }
 
    # Because this 'location' block contains another 'add_header' directive,
    # we must redeclare the STS header
    location /servlet {
        add_header X-Served-By "My Servlet Handler";
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
        proxy_pass http://localhost:8080;
    }
}
 
 
 
 
 
 
 
 
  • nginx/http_strict_transport_security.txt
  • Последнее изменение: 2022/06/30 10:13
  • admin