HSTS
HSTS (HTTP Strict Transport Security, RFC 6797) — HTTP-заголовок, приказывающий браузеру ходить на сайт только по HTTPS. Защита от sslstrip и downgrade-атак.
Заголовок
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
max-age— секунды. 63072000 = 2 года (рекомендуется для preload)includeSubDomains— распространить на все поддоменыpreload— заявка на включение в hardcoded-список браузеров
Как работает
- Первый визит: HTTP → 301 на HTTPS → HTTPS-ответ с HSTS-заголовком.
- Браузер запоминает: домен + max-age.
- Любой последующий
http://URL автоматически переписывается наhttps://до сетевого запроса.
Проблема первого визита (TOFU)
На самом первом заходе браузер ещё не знает про HSTS. Если атакующий MITM перехватит первый запрос — sslstrip возможен.
HSTS Preload
Список hardcoded в Chrome, Firefox, Safari, Edge. Если ты в списке — браузер знает про HSTS с рождения, без первого визита.
Требования:
- Валидный TLS
- Редирект HTTP→HTTPS на том же хосте
- HSTS с
max-age >= 31536000(год),includeSubDomains,preload
Подать: hstspreload.org. Убрать — сложно, до полугода.
Пример nginx
server {
listen 443 ssl http2;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
}
Опасность includeSubDomains
Внутренний dev.example.com без TLS сломается. Проверь все поддомены до включения.
HPKP (мёртвый)
HPKP (HTTP Public Key Pinning) 2015–2018