HSTS и защитни headers за Вашия уебсайт
При всяка страница Вашият уеб сървър изпраща заглавни редове (headers): кратки редове с инструкции за браузъра. Те определят отчасти колко безопасно браузърът се отнася с Вашия сайт. Тук ще прочетете какво е HSTS, какви други защитни заглавни редове съществуват и как да ги настроите и тествате.
Първо Вашият сайт трябва да има работещ сертификат и да пренасочва посетителите към https. За това прочетете в Активиране, подновяване и отстраняване на проблеми с SSL сертификат и Задължително пренасочване на посетителите към https.
Какво прави HSTS?
Пренасочването към https има един слаб момент: първата заявка през http все още е нешифрована. Някой в същата мрежа, например в обществена wifi мрежа, може да прихване тази заявка. HSTS (HTTP Strict Transport Security) решава този проблем. Вашият сайт изпраща през https следния заглавен ред:
Strict-Transport-Security: max-age=31536000
Тогава браузърът запомня, че може да отваря Вашия сайт само през https. Ако по-късно посетител въведе http://, браузърът сам го превръща в https, още преди да е изпратено нещо по мрежата. HSTS заглавен ред, който пристига през обикновено http, браузърът игнорира.
| Елемент | Значение |
|---|---|
max-age | Колко дълго браузърът го запомня, в секунди. Тестът на internet.nl приема поне една година (31536000) за достатъчна. |
includeSubDomains | Важи и за всички поддомейни, като shop.vashdomein.nl и mail.vashdomein.nl. |
preload | Заявявате включване в списъка, вграден в браузърите (hstspreload.org). Тогава дори самото първо посещение е защитено. За това са необходими между другото една година, includeSubDomains и https на всички поддомейни. Премахването отново отнема дълго време. |
max-age=0 | Изтрива запомнената инструкция при следващото посещение през https. |
includeSubDomains това важи и за всеки поддомейн, например стара страница за камера или принтер без сертификат. Затова изграждайте постепенно: започнете с кратък max-age, например един ден (86400), проверете дали всичко работи и увеличавайте стъпка по стъпка до една година.HSTS при WebOké
На повечето от нашите сървъри уеб сървърът изпраща HSTS по подразбиране за всеки уебсайт, който се отваря през https: Strict-Transport-Security: max-age=31536000. Това е една година, без includeSubDomains и без preload. За това не Ви е нужно да правите нищо. На няколко сървъра това не е включено по подразбиране; там го включвате сами. Дали Вашият сайт вече изпраща HSTS и с какъв max-age, можете да видите в инструментите за разработчици на Вашия браузър или в теста на internet.nl (вижте по-долу).
Превключвателят за HSTS в DirectAdmin
В DirectAdmin отидете на Domains и кликнете върху Вашето име на домейн. Ако Secure SSL Connection е включено, при HSTS ще видите превключвателя Enable HTTP Strict Transport Security. След това кликнете върху Edit, за да запазите. Стъпка по стъпка как се прави това, можете да прочетете в Винаги пренасочвайте посетителите към https.
Ако Вашият сайт вече изпраща HSTS, не Ви е нужен превключвателят. Включете го само ако Вашият сайт все още не изпраща HSTS. Настройте HSTS само на едно място: в DirectAdmin или в .htaccess, не и на двете места. Ако браузърът получи два HSTS заглавни реда, той използва само първия.
Другите защитни заглавни редове
| Заглавен ред | Срещу какво | Начална стойност |
|---|---|---|
X-Content-Type-Options | Браузърът започва сам да отгатва какъв е даден файл, поради което качена „снимка“ може да бъде изпълнена като скрипт. | nosniff (единствената валидна стойност) |
Content-Security-Policy: frame-ancestors или X-Frame-Options | Clickjacking: друг сайт зарежда Вашата страница невидимо във фрейм, така че посетителите несъзнателно кликват върху Вашите бутони. | frame-ancestors 'self', или по-старият заглавен ред X-Frame-Options: SAMEORIGIN |
Referrer-Policy | При клик към друг сайт браузърът изпраща адреса на предишната страница, понякога с включен в него термин за търсене или номер на поръчка. | strict-origin-when-cross-origin, или по-строгите same-origin или no-referrer. Internet.nl приема само строгите стойности за добри. |
Permissions-Policy | Определя кои функции на браузъра могат да използват Вашата страница и вградените фреймове, като камера, микрофон и местоположение. | camera=(), microphone=(), geolocation=() изключва тези три функции. Ако Вашият сайт използва някоя от тях, пропуснете я. |
Content-Security-Policy (пълна) | Ограничава от кои места могат да се зареждат скриптове, стилове и изображения. Това прави вмъкнатите злонамерени скриптове (XSS) много по-трудни. | Персонализирано за всеки сайт. Избягвайте unsafe-inline, unsafe-eval и заместващи символи. |
Настройване в .htaccess
Поставете тези редове в началото на файла .htaccess в папката public_html на Вашия домейн. Първо направете копие на файла.
<IfModule mod_headers.c> Header always set X-Content-Type-Options "nosniff" Header always set Content-Security-Policy "frame-ancestors 'self'" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()" # Само ако Вашият сайт все още не изпраща HSTS (вижте по-горе): # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Добавете includeSubDomains едва когато сте сигурни, че всеки поддомейн има https. Ако използвате WordPress, можете да настроите заглавните редове и чрез приставка (plugin). Изберете известна приставка, която все още се актуализира, и настройте всеки заглавен ред само на едно място: в приставката или в .htaccess.
Content-Security-Policy-Report-Only. Той не блокира нищо, но показва в конзолата на браузъра какво би било блокирано. При съмнение оставете това на Вашия уеб разработчик, или започнете само с frame-ancestors.Тестване
- Internet.nl: въведете Вашия домейн в теста на уебсайта на internet.nl.
- Вашият браузър: отворете Вашия сайт, натиснете F12 (или изберете Инспектиране), отидете на раздела Мрежа (Network), заредете страницата отново и кликнете върху първата заявка. Под Заглавни редове на отговора (Response Headers) ще видите всичко, което Вашият сървър изпраща.
- Командният ред:
curl -sI https://vashdomein.nl/показва заглавните редове.
След всяка промяна проверявайте дали Вашият сайт, формуляри и страница за плащане все още работят. Освен това поддържайте Вашата CMS система, приставки и теми актуализирани. Вижте Защита на wp-login.php на WordPress.
Допълнително четене
- MDN: Strict-Transport-Security (на английски)
- MDN: Content-Security-Policy (на английски)
- MDN: Permissions-Policy (на английски)
- HSTS списък за предварително зареждане (preload) (на английски)
