Модул 4 · 4.2
Вашият уебсайт: https, HSTS и защитни заглавни редове @@ОМСКРИВАНЕ@@
Модул 4: Имейл, уебсайт и домейн · Време за четене: 11 минути
Цел на урока: След този урок ще можете да проверите основната защита на Вашия уебсайт: валиден сертификат, пренасочване към https, HSTS с подходящ max-age, най-важните защитни заглавни редове и актуализирането на Вашата CMS система.
Ключови понятия: TLS сертификат, https, пренасочване към https, HSTS, max-age, includeSubDomains, preload, HTTP заглавен ред, Content-Security-Policy, X-Content-Type-Options, frame-ancestors, X-Frame-Options, Referrer-Policy
Какво се случва, когато някой отвори Вашия сайт
Ако клиент въведе example.com в адресната лента, браузърът изпраща заявка за страницата към Вашия уеб сървър. Този разговор минава чрез HTTP. При https около него има криптирана връзка: TLS. За това на Вашия уебсайт е нужен TLS сертификат (често наричан още SSL сертификат). Сертификатът доказва, че сървърът наистина принадлежи на example.com, а криптирането гарантира, че никой по пътя не може да чете или да променя съдържанието. Това е важно при обществен Wi-Fi, където не знаете кой управлява мрежата (урок 5.3).
При всеки отговор сървърът, освен самата страница, изпраща и серия от заглавни редове (headers): кратки редове с информация и инструкции за браузъра. Вие не ги виждате на екрана, но те до голяма степен определят колко безопасно браузърът се отнася към Вашия сайт. Част от тях са защитни заглавни редове. В този урок ще разгледаме четирите нива: сертификат, пренасочване, HSTS и заглавни редове. След това накратко ще разгледаме актуализирането на самия уебсайт.
Ниво 1: валиден сертификат
Сертификатът е наред, ако отговаря на три условия:
- той не е изтекъл;
- издаден е от доверен издател (сертифициращ орган, който браузърите разпознават, като Let's Encrypt или търговски доставчик);
- важи за точно името, което посетителят отваря:
example.comиwww.example.com, ако използвате и двете.
Почти всеки доставчик на хостинг днес предоставя безплатен сертификат, който се подновява автоматично. Ако нещо се обърка, обикновено причината е, че домейнът сочи към друг сървър или че CAA запис блокира издателя (урок 4.3).
Важно е да знаете: катинарчето не казва нищо за надеждността на сайта. То само показва, че връзката е криптирана и че сертификатът съответства на името в адресната лента. Фишинг сайтовете на mijnbank-veilig.example също имат катинарче. Затова в урок 3.2 ще научите как да четете домейна.
Ниво 2: винаги пренасочвайте към https
Сертификатът сам по себе си не е достатъчен. Който отвори http://example.com, например чрез стар линк или само изписвайки името, трябва автоматично да бъде пренасочен към https версията. Това се нарича пренасочване (redirect, обикновено със статус код 301).
Правилният ред е следният:
http://example.com -> https://example.com
https://example.com -> https://www.example.com (само ако използвате www като основен адрес)
http://www.example.com -> https://www.example.comОбърнете внимание на първия ред: пренасочете от http първо към https на същото име, едва след това евентуално към www. Така браузърът може да получи и инструкцията за HSTS от голото име. Internet.nl проверява точно това.
Честа грешка е двойното пренасочване: в контролния панел на хостинга И в плъгин или в .htaccess. Това може да доведе до безкраен цикъл ("твърде много пренасочвания"). Използвайте само едно място.
Ниво 3: HSTS
Пренасочването има слаб момент: самата първа заявка все още минава некриптирана чрез http. Атакуващ в същата мрежа може да прихване точно тази заявка и да задържи посетителя на фалшифицирана, некриптирана версия. За това служи HSTS (HTTP Strict Transport Security, RFC 6797).
С HSTS Вашият сайт изпраща чрез https следния заглавен ред:
Strict-Transport-Security: max-age=31536000; includeSubDomainsТогава браузърът запомня: "този сайт да се отваря само чрез https, следващите 31 536 000 секунди (една година)". Ако по-късно посетителят въведе http://example.com, браузърът сам го превръща в https, още преди нещо да бъде изпратено по мрежата. Слабата първа заявка отпада.
| Елемент | Значение |
|---|---|
max-age= | Колко дълго браузърът го запомня, в секунди. Internet.nl приема поне една година (max-age=31536000) за достатъчно; кратък период не защитава хората, които посещават сайта Ви само от време на време. |
includeSubDomains | Важи и за всички поддомейни, като shop.example.com и mail.example.com. |
preload | Заявявате включване в списъка, вграден в браузърите (hstspreload.org). Така дори самото първо посещение е защитено. Изисквания: наред с други неща, max-age от поне една година, includeSubDomains и всички поддомейни на https. Отстраняването от списъка отнема дълго време. |
max-age=0 | Изтрива запомнената инструкция. |
Три неща, които трябва да знаете, преди да включите HSTS:
- Първо https трябва да работи навсякъде. Браузър, който е запомнил HSTS и установи грешка в сертификата, не предлага на посетителя бутон за продължаване въпреки това (RFC 6797, параграф 12.1). Ако сертификатът Ви изтече или не важи за
www, сайтът Ви става недостъпен за тези посетители, докато проблемът не бъде решен. includeSubDomainsзасяга всичко под Вашия домейн. Стар поддомейн без сертификат, например страница на принтер или камера наcamera.example.com, вече няма да може да се отваря.- Изграждайте постепенно. Започнете с кратък
max-age(например един ден), проверете дали всичко работи, и увеличавайте стъпка по стъпка до една година. При всяка стъпка изчакайте целия период.
HSTS заглавен ред, получен чрез обикновен http, се игнорира от браузъра. Затова го виждате само в https отговора.
Ниво 4: защитни заглавни редове
Освен HSTS, има няколко заглавни реда, които казват на браузъра какво му е позволено и какво не по отношение на Вашите страници. Не е нужно всички да са перфектни, но първите три са лесни за прилагане и без риск.
| Заглавен ред | Срещу какво | Добра стойност |
|---|---|---|
X-Content-Type-Options | Браузърът сам започва да отгатва какъв е даден файл, поради което качена "картинка" може да бъде изпълнена като скрипт. | nosniff (единствената валидна стойност) |
Content-Security-Policy: frame-ancestors ... или X-Frame-Options | Clickjacking: друг сайт зарежда Вашата страница невидимо в рамка (frame) и кара посетителите, без да забележат, да кликат върху Вашите бутони. | frame-ancestors 'self' или 'none'; по-старият заглавен ред X-Frame-Options: SAMEORIGIN или DENY |
Referrer-Policy | При клик към друг сайт браузърът изпраща адреса на предишната страница. Той може да съдържа чувствителна информация, като дума за търсене или номер на поръчка. | no-referrer или same-origin (строго), strict-origin-when-cross-origin (разпространено, internet.nl дава предупреждение тук) |
Content-Security-Policy (пълна) | Ограничава откъде могат да се зареждат скриптове, стилове и изображения. Прави вмъкнати злонамерени скриптове (XSS) много по-трудни. | Индивидуално за всеки сайт. Избягвайте unsafe-inline, unsafe-eval и wildcard стойности. |
Пълната Content-Security-Policy е най-силна, но и най-трудна за прилагане: твърде строго правило може да счупи Вашата статистика, бутона за плащане или прозореца за чат. С варианта Content-Security-Policy-Report-Only можете първо да измерите какво би било блокирано, без да счупите нищо. Оставете това на Вашия уеб разработчик или започнете само с frame-ancestors.
Самостоятелна проверка на заглавните редове
Отворете сайта си в браузър, натиснете F12 (или изберете "Инспектиране"), отидете на раздела Мрежа (Network), презаредете страницата и кликнете върху първата заявка. Под "Заглавни редове на отговора" (Response Headers) ще видите всичко, което изпраща сървърът. Може и чрез командния ред:
curl -sI https://example.com/Самият уебсайт: CMS, плъгини и теми
Най-добрите заглавни редове не помагат, ако софтуерът зад Вашия сайт е уязвим. Повечето хакнати сайтове на малки фирми не са пробити чрез уеб сървъра, а чрез остарял плъгин, тема, която от години не е актуализирана, или слаба парола на администратора.
- Включете автоматични актуализации за Вашата CMS (например WordPress, Joomla или друга система) и за плъгините, където е възможно.
- Премахнете плъгините и темите, които не използвате; само деактивирането не е достатъчно, файловете все още са там.
- За входа на администратора използвайте силна, уникална парола и двуфакторно удостоверяване (модул 2), и ограничете броя на опитите за вход.
- Поддържайте версията на PHP (или друг използван език) на пакета Ви на версия, която все още получава актуализации (урок 5.1).
На практика: ето как изглежда
В DirectAdmin, панела, който WebOké използва, първо включвате за Вашия домейн Secure SSL, а след това Force SSL with https redirect. На същото място има превключвател за HSTS; включете го едва когато сертификатът работи за всички имена. При други доставчици процесът е подобен или го настройвате в настройките на Вашата CMS система.
Ако сайтът Ви работи на Apache или LiteSpeed, можете да зададете заглавните редове и в .htaccess:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000"
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"
</IfModule>Добавете includeSubDomains едва когато сте сигурни, че всеки поддомейн има https. След всяка промяна проверявайте с теста на уебсайтове на internet.nl или с инструментите за разработчици на браузъра Ви.
Обобщение
- Катинарчето означава: криптирано и правилното име. Не означава: надеждно.
- Винаги пренасочвайте http към https, първо на същото име, и само от едно място.
- HSTS кара браузъра да запомни, че Вашият сайт работи само чрез https; internet.nl приема
max-ageот поне една година (31536000) за добро. Включете го едва когато https работи навсякъде, и го изграждайте постепенно. X-Content-Type-Options: nosniff,frame-ancestors(илиX-Frame-Options) иReferrer-Policyса лесни за прилагане; пълната Content-Security-Policy е индивидуална за всеки случай.- Актуализациите на Вашата CMS система, плъгини и теми са поне толкова важни, колкото заглавните редове.
Тест (quiz)
Задача
Задача A4.2: Проверка на https, HSTS и заглавните редове на Вашия уебсайт. Въведете домейн името на Вашия уебсайт (ако нямате, използвайте internet.nl). Програмата отваря http:// и https:// на Вашия домейн и проверява сертификата, пренасочването към https, HSTS и защитните заглавни редове. Получавате за всяка точка зелено, оранжево или червено с обяснение.
Задача D4.2: Актуализиране и почистване на Вашия уебсайт. Влезте в управлението на Вашия уебсайт, проверете версията на Вашата CMS, плъгини и теми, премахнете това, което не използвате, и включете автоматични актуализации, където е възможно. Отметнете списъка за проверка и отговорете на въпроса за размисъл.
Задача D4.2: Актуализиране и почистване на Вашия уебсайт
Подходете по следния начин: (1) Влезте в административния панел на Вашия уебсайт (или помолете Вашия уеб разработчик да направи това заедно с Вас). (2) Отбележете версията на Вашата CMS и проверете дали има налични актуализации. (3) Направете резервно копие (урок 6.1), инсталирайте актуализациите на CMS, добавките и темите. (4) Премахнете добавките и темите, които не използвате. (5) Активирайте автоматични актуализации там, където е възможно. (6) Проверете кои администраторски акаунти съществуват и премахнете акаунтите на хора, които вече не работят там. (7) Активирайте двуфакторно удостоверяване за всеки администраторски акаунт.
Вашите отметки и бележки остават само в този браузър; не ги изпращаме никъде. Ако сте влезли, в Моите курсове запазваме само че сте изпълнили задачата.
За допълнително четене
Стъпките в статиите на WebOké важат за средата на WebOké; при други доставчици процесът е сходен.
- Активиране, подновяване и отстраняване на проблеми със SSL сертификат
- Задължително пренасочване на посетителите към https
- Ръководство за DirectAdmin 6.4: Посетителите винаги да се пренасочват към https
- Ръководство за DirectAdmin 6.7: Няма катинарче или 'не е сигурно': решаване на смесено съдържание
- Ръководство за DirectAdmin 15.10: Web Application Firewall
- Защита на wp-login.php в WordPress
- Internet.nl, тест на уебсайта (независим): https://internet.nl
- RFC 6797, HTTP Strict Transport Security: https://www.rfc-editor.org/rfc/rfc6797
- Списък за HSTS preload: https://hstspreload.org
- MDN, обяснение на заглавните редове (на английски): https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security
