HSTS в Nginx: следует ли добавлять заголовок Strict-Transport-Security также в серверные блоки поддоменов?

Возьмем следующий конфигурационный файл nginx.conf с блоками server для example.com и subdomain.example.com :

http {
    ...

    server {
        listen [::]:80 ipv6only=off default_server;
        server_name example.com;
        return 301 https://example.com$request_uri;
    }
    server {
        listen [::]:443 ipv6only=off ssl default_server;
        server_name example.com;
        add_header Strict-Transport-Security
            "max-age=63072000; includeSubDomains; preload" always;
        ...
    }

    server {
        listen [::]:80 ipv6only=off;
        server_name subdomain.example.com;
        return 301 https://subdomain.example.com$request_uri;
    }
    server {
        listen [::]:443 ipv6only=off ssl;
        server_name subdomain.example.com;
        add_header Strict-Transport-Security
            "max-age=63072000; includeSubDomains; preload" always; # <-- again ???
        ...
    }
}

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

Однако, если этот браузер посетит subdomain.example. com , прежде чем увидеть example.com , это не поможет, не так ли? Итак, чтобы прикрыть этот сценарий, мне нужно добавить тот же самый add_header во все серверные блоки поддоменов ... верно?

4
задан 27 May 2018 в 09:44
2 ответа

Вы правы, что лучше иметь заголовок HSTS Strict-Transport-Security везде, где он вам нужен, чтобы клиент мог его получить даже если доступ к sub.example.com осуществляется до example.com или истек срок действия кэшированной информации HSTS.

Флаг includeSubDomains влияет на все поддомены, в которых это присутствует. Это означает, что includeSubDomains на sub.example.com вступает в силу для *. Sub.example.com вместо *. Example.com ]. (Это естественно, так как было бы плохо, если бы, например, example.co.uk мог повлиять на *. Co.uk .)

  • Если вы не используете ] sub.sub.example.com вы можете оставить Strict-Transport-Заголовок безопасности ваших поддоменов без этого флага.

  • subA.example.com не может защитить subB.example.com .

6
ответ дан 3 December 2019 в 02:31

Верно. Параметр includeSubdomains используется для принудительного использования https для всех ресурсов, связанных внутри html-страницы, обслуживаемой текущим доменом.

Цитирование https://www.nginx.com/blog/http-strict-transport-security-hsts -and-nginx / :

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

Также помните, что если вы добавите директиву add_header внутри блока location {}, вам также потребуется переопределить add_header Strict-Transport-Security ... внутри этого блока. Еще раз цитируем:

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

5
ответ дан 3 December 2019 в 02:31

Теги

Похожие вопросы