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