В теме перехода на https есть такой аспект, как HTTP Strict Transport Security (HSTS) — форсирование защищенного соединения. Это http-заголовок Strict-Transport-Security
, указывающий броузеру установить защищенное соединение, даже если переход был по ссылке с указанием протокола http://. Предусмотрен стандартом RFC 6797.
HTTP Strict Transport Security
HSTS повышает защищенность сайта, в частности от атак с понижением степени защиты. Разумеется, сайт должен поддерживать защищенное соединение и переадресацию с http на https, желательно с кодом 301 (permanent redirect).
Добавить HSTS-заголовок можно разными способами.
Того, кто правит nginx.conf, учить не надо.
Для сервера Apache можно в файле .htaccess
:
<IfModule mod_headers.c> Header set Strict-Transport-Security "max-age=31536000" </IfModule>
Значение max-age=31536000
устанавливает срок хранения флага броузером примерно в один год.
Можно установить заголовок и средствами вордпресса, в файле functions.php
активной темы:
add_action( 'send_headers', 'hsts' ); function hsts() { header( 'Strict-Transport-Security: max-age=31536000' ); }
Кроме max-age
может быть установлено значение includeSubDomains
, но в этом случае сертификат должен поддерживать все поддомены.
Некоторая уязвимость может быть связана с тем, что первое соединение возможно по протоколу http, которое может быть перехвачено. Чтобы это предотвратить, есть дополнительное значение того же заголовка preload
, с которым броузер может предварительно проверить защищенность домена в специальном списке (HSTS preload list).
То есть, полный вариант такой:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Дополнение
Недавнее (опубликовано 17 марта 2016) исследование компании Netcraft показало, что 95% всех https серверов в мире (включая сайты банков и платежных систем) либо вообще не используют HTTP Strict Transport Security
, либо используют неправильно. В результате их защищенность значительно понижена.