Нужно ли включать HSTS в дополнение к принудительному включению HTTPS в .htaccess?

Я ничего не знаю об этом, поэтому, пожалуйста, ELI5 в своих ответах.

Следуя инструкциям моего провайдера Dreamhost, я установил SSL-сертификат, а затем добавил эти строки в свой файл .htaccess, чтобы HTTP-запросы были переписаны в HTTPS-запросы.

# Redirect http requests to https
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Вроде бы все работает правильно, т.е.: каждый раз, когда я пытаюсь получить доступ к странице в этом домене по HTTP, она переписывается на HTTPS и в адресной строке отображается значок «Безопасный».

Мой вопрос: нужно ли мне также включать HSTS? Читая об этом, кажется, что он делает то же самое, что и предыдущие изменения в файле .htaccess. Вот выдержка из Хостинг A2 (не мой провайдер):

Включение HSTS

Когда для сайта включен HSTS, веб-браузеры автоматически заменяют любые небезопасные запросы (http://) на безопасные запросы (https://). Все, что вам нужно сделать, чтобы включить HSTS, — это добавить заголовок в файл .htaccess вашего сайта. Веб-браузеры распознают этот заголовок, а затем позаботятся обо всем остальном без какого-либо дополнительного вмешательства с вашей стороны.

Они предлагают добавить это в .htaccess:

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

Еще одно руководство, на этот раз относящееся к Dreamhost, предлагает включить HSTS вместе с принудительным включением HTTPS в файл .htaccess, но не говорит почему. Эта страница предлагает что-то немного другое:

Header set Strict-Transport-Security "max-age=31415926; includeSubDomains; preload" env=HTTPS

Нужен ли фрагмент кода «https rewrite» И HSTS? Или достаточно иметь только фрагмент кода «https rewrite»? Нужен ли мне код HSTS вообще, и если да, то в чем разница между двумя строками кода HSTS в моем посте?


person AlwaysLearning    schedule 17.03.2017    source источник


Ответы (2)


HSTS сообщает браузеру, что по умолчанию нужно подключаться только через https, но каждый из разных флагов делает что-то немного другое:

  • включить субдомены

Это означает, что если ваш сайт находится на mydomain.com, политика будет применяться ко всем поддоменам (например, foo.mydomain.com, bar.mydomain.com и т. д.). Без этого включено. политика применяется только к конкретному рассматриваемому домену.

  • предварительная загрузка

Хотя HSTS концептуально великолепен, при первом вводе mydomain.com браузер попытается связаться с вашим сайтом по схеме http, поскольку он не знает, что ваш сайт находится на https, что дает злоумышленнику MITM возможность предоставить вам вредоносную версию сайта. (также известная как проблема TOFU). Чтобы обойти это, существует централизованный список браузеров для сайтов, с которыми по умолчанию следует связываться на https, но чтобы иметь возможность попасть в этот список, вы должны иметь флаг preload в этом заголовке. Подробнее об этом можно узнать здесь.

person Srdjan Grubor    schedule 17.03.2017
comment
Спасибо за объяснение двух строк кода HSTS. Однако я думаю, что, возможно, мой вопрос не был ясен, когда я спросил, нужны ли мне оба. Под обоими я подразумевал, нужен ли мне фрагмент перенаправления (в верхней части моего вопроса) И код HSTS? Или я должен выбрать только один, и если да, то какой и почему? - person AlwaysLearning; 18.03.2017
comment
@AlwaysLearning Делайте и то, и другое. HSTS без перенаправления бесполезен, а перенаправление без HSTS может быть перехвачено атакой «человек посередине». - person Srdjan Grubor; 18.03.2017
comment
HSTS без перенаправления работает нормально, ТОЛЬКО ЕСЛИ пользователь использует современный браузер, поддерживающий предварительную загрузку HSTS. - person EricLaw; 18.03.2017
comment
Это SSL-and-TLS-Deployment-Best-Practices кажется применимым. - person surfmuggle; 23.08.2017

По умолчанию, если схема (http или https) явно не указана, используется http.

Поэтому перенаправление необходимо, чтобы перенаправить его на предпочтительную версию https, поскольку большинство посетителей, которые вводят URL-адрес, не будут включать схему и поэтому перейдут на версию http.

HTTP Strict-Transport-Security (HSTS) – это метод безопасности, гарантирующий, что вы всегда будете оставаться на https. На самом деле это не предназначено для того, чтобы избавиться от необходимости перенаправления. В частности, HSTS работает, отправляя вашему веб-браузеру сообщение (используя заголовок ответа HTTP), чтобы сказать: «Пожалуйста, используйте только https для этого сайта в течение следующего периода времени X». Это сообщение следует отправлять только при посещении сайта через https. Поэтому, если вы не перенаправляете в первую очередь, многие посетители могут даже не знать, что у вас https-сайт, и поэтому не получат инструкцию HSTS.

HSTS в основном используется как способ изменить веб-сайт по умолчанию на https и предотвратить атаки «человек посередине» (MITM), которые могут попытаться удержать вас на http: например. если вы подключитесь к сети Wi-Fi хакера и зайдете на веб-сайт вашего банка, они не смогут перехватить это соединение, если оно осуществляется через https, но смогут, если это будет сделано через http, поэтому злоумышленники перехватят HTTP-запрос и остановят происходит перенаправление, чтобы держать вас на http и перехватывать все сообщения в ваш банк и из него.

Вы можете «предварительно загрузить» инструкцию HSTS в код веб-браузера, что обеспечивает еще большую безопасность, поскольку вам не нужно сначала посещать сайт через https, чтобы получить инструкцию HSTS. Следует оговориться, что от этого в принципе нет пути назад, и это следует учитывать только в том случае, если вы действительно понимаете HSTS. Есть много-много-много запросов на удаление сайтов из списка предварительной загрузки что занимает минимум 3 месяца для Chrome (без гарантий для других браузеров) и делает ваш сайт полностью недоступным в течение этого времени, если вы не используете https. Так что здесь есть реальная опасность! В частности, если часть вашего сайта обслуживается через https (например, www.example.com), а часть — нет (например, intranet.example.com). Это также опасность HSTS, но еще более опасная с предварительной загрузкой.

Еще один момент, который следует отметить, заключается в том, что многие веб-агенты не будут использовать HSTS и особенно списки предварительной загрузки (например, сканеры поисковых систем, старые браузеры и т. д.). Итак, снова HSTS следует использовать поверх перенаправления, а не вместо него.

HSTS — отличная мера безопасности, и ее следует использовать на всех сайтах (после того, как они полностью перестанут использовать http), но, как и большинство мер безопасности, имеет свои риски. Поэтому убедитесь, что вы понимаете это, прежде чем развертывать его. Я ненавижу сайты и учебные пособия, которые говорят включить его, не объясняя это и риски. Теоретически сайт, использующий HSTS, может больше не нуждаться в перенаправлении, но на практике это все равно потребуется для первого посещения и агентов, которые не понимают или не реализуют HSTS.

Обобщить:

  • Всегда используйте редиректы.
  • Настоятельно рассмотрите HSTS, но сначала прочитайте об этом и начните с низкого максимального возраста, без включения поддоменов и предварительной загрузки - пока вы действительно не поймете, что они означают.
  • если вы используете сайт с высоким уровнем риска, рассмотрите возможность включения вашего сайта в список предварительной загрузки HSTS в качестве высокого уровня безопасности, но опять же помните о рисках здесь. Делайте это только в том случае, если вы действительно понимаете HSTS и чувствуете, что вам нужен этот уровень безопасности.
person Barry Pollard    schedule 18.03.2017