HSTS — как максимально защитить свой сайт
Что такое HSTS, зачем он нужен и как включить его на своём сайте
Вы радостно выкатили свежий сайт в сеть, а Гуглу он не нравится: вместо загрузки всех ваших красивых анимированных прелоадов, крутых параллаксов и прочих wow-эффектов, он говорит пользователям, что соединение небезопасно и вот это вот всё. Первое впечатление, как известно, имеет значение, поэтому самое время позаботиться о включении HSTS — чтобы пользователи видели красоту, а не подозрительные предостережения.
Что такое HSTS
HSTS расшифровывается как HTTP Strict Transport Security — это механизм, после включения которого пользователи видят только защищенные страницы вашего сайта.
Что он умеет:
Включается HSTS с помощью специального заголовка ответа «Strict-Transport-Security».
Что он умеет:
- автоматически преобразовывает небезопасные HTTP-ссылки в безопасные HTTPS-ссылки;
- не позволяет пользователю проигнорировать сообщение о проблемах с сертификатом;
- позволяет добавить сайт в список предварительной загрузки HSTS, чтобы защитить его даже при первой загрузке браузером.
Включается HSTS с помощью специального заголовка ответа «Strict-Transport-Security».
Когда HSTS настроен правильно, то есть без ошибок в конфигурации, он блокирует для просмотра все незащищенные версии страниц вашего сайта.
При любой попытке посетителей перейти на небезопасную версию страницы сайта (http://), они будут автоматически перенаправлены на ее защищенную версию (https://).
Это как 301 редирект, только на уровне браузера, а не на уровне веб-страницы. Такое перенаправление круче — оно всегда использует только https://, даже при первой загрузке браузером, в отличие от 301 редиректа.
Как максимально защитить свой сайт с помощью HSTS
Для этого надо сделать два шага:
При любой попытке посетителей перейти на небезопасную версию страницы сайта (http://), они будут автоматически перенаправлены на ее защищенную версию (https://).
Это как 301 редирект, только на уровне браузера, а не на уровне веб-страницы. Такое перенаправление круче — оно всегда использует только https://, даже при первой загрузке браузером, в отличие от 301 редиректа.
Как максимально защитить свой сайт с помощью HSTS
Для этого надо сделать два шага:
- Включить HSTS на сайте.
- Добавить сайт в список предварительной загрузки HSTS.
Чтобы включить HSTS на сайте
- Выберите вариант настроек для заголовка Strict-Transport-Security.
- Добавьте настройки для заголовка Strict-Transport-Security в конфигурацию веб-сервера.
Как выбрать вариант настроек для заголовка Strict-Transport-Security
Заголовок Strict-Transport-Security может содержать разный набор переменных. От того, какие переменные содержит заголовок, зависит степень защиты сайта. Возможны три варианта.
Базовая настройка (наименее безопасная)
Базовая настройка (наименее безопасная)
Приведенный выше пример — самая простая версия заголовка.
- Не влияет на поддомены.
- Сайт не может быть включен в список предварительной загрузки.
Список предварительной загрузки HSTS — список сайтов, которые утверждает Google, чтобы Chrome и другие браузеры еще до загрузки этих сайтов понимали, что все их страницы нужно открывать только через https.
Такая настройка наименее безопасна, потому что не защищает поддомены и не позволяет сайту попасть в список предварительной загрузки HSTS. То есть, пользователи, которые впервые загружают ваш сайт в браузере, могут использовать для этого незащищенную ссылку http://.
Более безопасная настройка
Более безопасная настройка
Приведенный выше пример — более надежная версия заголовка:
Такая настройка включает HSTS не только для домена, но и для всех его поддоменов, но этого все еще недостаточно, чтобы сайт попал в список предварительной загрузки HSTS.
Наиболее безопасная и рекомендуемая настройка
- Относительно безопасная настройка.
- Включает HSTS на поддоменах.
- Сайт не может быть включен в список предварительной загрузки.
Такая настройка включает HSTS не только для домена, но и для всех его поддоменов, но этого все еще недостаточно, чтобы сайт попал в список предварительной загрузки HSTS.
Наиболее безопасная и рекомендуемая настройка
Приведенный выше пример является наиболее безопасной версией заголовка. Рекомендуем именно такую настройку, поскольку:
Переменные
Как только вы определили настройки для заголовка, можно добавлять их в конфигурацию веб-сервера.
- это самая безопасная настройка,
- она включает HSTS на поддоменах,
- сайт может быть включен в список предварительной загрузки.
Переменные
- Strict-Transport-Security: — имя заголовка.
- max-age= — количество времени в секундах, в течение которого все http:// перенаправляются на https://.
- includeSubDomains — включает HSTS на всех поддоменах.
- preload — дает разрешение на внесение сайта в список предварительной загрузки.
Как только вы определили настройки для заголовка, можно добавлять их в конфигурацию веб-сервера.
Как добавить настройки для заголовка Strict-Transport-Security в конфигурацию веб-сервера
Настройки для заголовка Strict-Transport-Security добавляются в конфигурацию веб-сервера так же, как любые другие заголовки. Вот самые распространенные сценарии.
Файл .htaccess
Если вы используете файл .htaccess для своих конфигураций, HSTS можно добавить с помощью следующего кода:
Файл .htaccess
Если вы используете файл .htaccess для своих конфигураций, HSTS можно добавить с помощью следующего кода:
Важно! Приведенный выше код является наиболее безопасным и содержит все параметры, которые необходимы, чтобы включить сайт в список предварительной загрузки HSTS. Эта рекомендуемая настройка будет использоваться во всех дальнейших примерах.
Apache
Добавляются в виртуалхост, который слушает ssl-подключения (<VirtualHost xx.xx.xxx.xx: 443>)
Apache
Добавляются в виртуалхост, который слушает ssl-подключения (<VirtualHost xx.xx.xxx.xx: 443>)
NGINX
Добавляются в блок настроек сервера, который слушает ssl-подключения (server {listen 443 …})
Добавляются в блок настроек сервера, который слушает ssl-подключения (server {listen 443 …})
IIS
HSTS уже реализован по спецификации в виде опенсорсного модуля для IIS.
Litespeed
HSTS можно реализовать с помощью конфигураций. htaccess или Apache, описанных выше, или его родной конфигурации Litespeed.
Настройки для заголовка добавлены в конфигурацию веб-сервера. Теперь нужно внести сайт в список предварительной загрузки HSTS. Пока сайт не в списке предварительной загрузки, он все еще не полностью защищен от атак типа MITM.
HSTS уже реализован по спецификации в виде опенсорсного модуля для IIS.
Litespeed
HSTS можно реализовать с помощью конфигураций. htaccess или Apache, описанных выше, или его родной конфигурации Litespeed.
Настройки для заголовка добавлены в конфигурацию веб-сервера. Теперь нужно внести сайт в список предварительной загрузки HSTS. Пока сайт не в списке предварительной загрузки, он все еще не полностью защищен от атак типа MITM.
Как попасть в список предварительной загрузки HSTS
1. Убедитесь, что сайт соответствует требованиям
Если у вас есть действующий и корректно настроенный на вашем веб-сервере сертификат и вы выполнили все действия, описанные в этой статье, то, скорее всего, ваш сайт соответствует требованиям. Заявленные требования:
Если у вас есть действующий и корректно настроенный на вашем веб-сервере сертификат и вы выполнили все действия, описанные в этой статье, то, скорее всего, ваш сайт соответствует требованиям. Заявленные требования:
- Действующий сертификат.
- Только HTTPS-трафик (весь HTTP-трафик должен быть перенаправлен на HTTPS).
- HSTS включен на базовом домене.
- HSTS включен на всех поддоменах, в том числе, на www, если для него существует запись DNS.
- Срок действия — не менее восемнадцати недель (10 886 400 секунд).
- Указан токен includeSubdomains.
- Указан токен предварительной загрузки.
- У любой страницы, на которую ваш сайт перенаправляет пользователя, должен быть заголовок HSTS.
2. Введите свой домен в в список предварительной загрузки HSTS
Перейдите в список предварительной загрузки и введите домен сайта. Дальше есть два сценария: либо вам сообщат, что сайт не соответствует требованиям для попадания в список, либо — что все ок. Статус домена можно отслеживать.
3. Ждите
Это долгий процесс. Может уйти несколько недель, пока сайт утвердят в список, и несколько месяцев, пока список окажется в свежих версиях Chrome и Firefox.
Перейдите в список предварительной загрузки и введите домен сайта. Дальше есть два сценария: либо вам сообщат, что сайт не соответствует требованиям для попадания в список, либо — что все ок. Статус домена можно отслеживать.
3. Ждите
Это долгий процесс. Может уйти несколько недель, пока сайт утвердят в список, и несколько месяцев, пока список окажется в свежих версиях Chrome и Firefox.
И напоследок — планируйте заранее
Если вы планируете запустить сайт или сменить домен в ближайшие несколько месяцев, стоит уже сейчас внести новый домен в список предварительной загрузки.
Интересная фигня. Будем пробовать :)