Мое веб-приложение работает на другом количестве хостов, которые я контролирую. Чтобы предотвратить необходимость изменения конфигурации Apache для каждого vhost, я добавляю большую часть конфигурации, используя файлы .htaccess в своем репо, поэтому базовая настройка каждого хоста - это всего лишь несколько строк. Это также позволяет изменить конфигурацию при развертывании новой версии. В настоящее время .htaccess(un) устанавливает заголовки, переписывает магию и контролирует кеширование UA.
Я хочу включить HSTS в приложение, используя .htaccess. Просто настроить заголовок легко:
Header always set Strict-Transport-Security "max-age=31536000"
Однако спецификация четко заявляет: "Хост HSTS НЕ ДОЛЖЕН включать поле заголовка STS в ответы HTTP, переданные по незащищенному транспорту". Поэтому я не хочу отправлять заголовок при отправке по HTTP-соединениям. См. http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14.
Я попытался установить заголовок, используя среду vars, но я застрял там. Кто знает, как это сделать?
По-видимому, существует доступная переменная среды HTTPS, которую можно легко использовать. Для людей с тем же вопросом:
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
Чтобы построить ответ nielsr, я использовал следующее в .htaccess, чтобы выполнить рекомендации по безопасному развертыванию по адресу https://hstspreload.org, которые жестко закодируют домен в браузер Chrome. Имейте в виду, что это приведет к принудительному использованию HSTS во всех ваших поддоменах, и что включение в список предварительной загрузки не может быть легко отменено, поэтому rtfm.
<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
</IfModule>
Для httpd.conf
(если у вас есть доступ для редактирования), вы можете использовать
<VirtualHost 65.81.122.43:443>
Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;"
</VirtualHost>
ПРИМЕЧАНИЕ. Вам нужно установить его только на HTTPS-хосте и не может быть на http-хосте.
Когда я должен и не должен использовать файлы .htaccess?
Разрешение файлов .htaccess заставит Apache искать их при каждом доступе к вашему серверу. Поскольку также ищутся родительские каталоги, это займет некоторое (небольшое) количество времени и может повлиять на производительность вашего сервера. Источник
Еще одна альтернатива - всегда устанавливать заголовок и условно удалять его для не-ssl-соединений:
Header always set Strict-Transport-Security "max-age=31536000" early
Header unset Strict-Transport-Security env=!HTTPS
Это имеет то преимущество, что директива Header
может использоваться как с условием env
так и с early
флагом. С одной директивой Header
env
и early
нельзя использовать вместе, они взаимоисключающие (см. Официальную документацию: https://httpd.apache.org/docs/current/mod/mod_headers.html#header).