Протокол HSTS (HTTP Strict Transport Security) позволяет администратору сайта указать на необходимость обращения только по HTTPS и автоматизировать проброс на HTTPS при изначальном обращении по ссылке на HTTP. Управление производится при помощи HTTP-заголовка Strict-Transport-Security, который выдаётся при обращении по HTTPS (при выдаче по HTTP заголовок игнорируется) и указывает браузеру на необходимость оставаться в зоне HTTPS даже при переходе по ссылкам "http://". Замена http:// на https:// будет автоматически выполняться при обращении к защищаемому ресурсу с внешних сайтов, а не только для внутренних ссылок. Использование в Apache: При помощи mod_headers устанавливаем для HTTPS-блока виртуального хоста заголовок Strict-Transport-Security (max-age - срок действия (1 год), includeSubdomains - распространять замену http:// на https:// для всех поддоменов; preload - занести в поддерживаемый браузером статический список). Дополнительно устанавливаем заголовок "X-Frame-Options: DENY" для запрета встраивания контента сайта в блоки iframe. LoadModule headers_module modules/mod_headers.so <VirtualHost 192.168.1.1:443> Header always set Strict-Transport-Security "max-age= 31536000; includeSubdomains; preload" Header always set X-Frame-Options DENY </VirtualHost> Для HTTP-блока хоста настраиваем редирект: <VirtualHost *:80> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </IfModule> </VirtualHost> Настройка в nginx: Добавляем в блок server: add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; add_header X-Frame-Options "DENY"; Настройка в Lighttpd: server.modules += ( "mod_setenv" ) $HTTP["scheme"] == "https" { setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload", "X-Frame-Options" => "DENY") }
Редирект тоже вешают, это разные меры.
После включения HSTS браузер уже никогда не будет делать httP запросы к указанному домену, только httpS. Таким образом нельзя будет встать посередине, перехватить (заблокировать) редирект 80 -> 443 и дальше контролировать весь открытый трафик.
Для этого надо, чтобы браузер хотя бы раз зашел на настоящий httpS домена и получил HSTS-заголовок.
То есть контент можно получить по http? но пытаемся средствами сервера запретить клиенту это делать?
> перехватить (заблокировать) редирект 80 -> 443
С тем же успехом можно перехватить любой заголовок, то есть если допустить, что пользователь туп как пробка и всегда входит по ссыке domain.com, не проверяя хттпэСность, то спасти его от слива инфы никак нельзя.
Отдать /модифицированный/ контент по httP мог MtM-прокси. При этом он мог получить его вполне себе по httpS.
>> перехватить (заблокировать) редирект 80 -> 443 > С тем же успехом можно перехватить любой заголовок, то есть если допустить, > что пользователь туп как пробка и всегда входит по ссыке domain.com, > не проверяя хттпэСность, то спасти его от слива инфы никак нельзя.
Нельзя спасти его от слива инфы только при первом входе пользователя на сайт. После получения заголовка HSTS и сохранения его в хранилище браузер больше не будет обращаться к серверу по httP, соответственно вмешаться в трафик будет нельзя.
а чем не устроило ?
Redirect 301 / https://www.example.com/
А в конфигах
>Header always set Strict-Transport-Security "max-age= 31536000; includeSubdomains; preload" >add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; >setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload"
У apache, в отличие от nginx и Lighttpd, какой-то свой год?
Дело хорошее, но только после этого - https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>