Moduł 4 · 4.2
Państwa strona internetowa: https, HSTS i nagłówki bezpieczeństwa
Moduł 4: E-mail, strona internetowa i domena · Czas czytania: 11 minut
Cel lekcji: Po tej lekcji będą Państwo potrafili sprawdzić podstawowe zabezpieczenia swojej strony internetowej: ważny certyfikat, przekierowanie na https, HSTS z odpowiednią wartością max-age, najważniejsze nagłówki bezpieczeństwa oraz aktualizację swojego CMS.
Kluczowe pojęcia: certyfikat TLS, https, przekierowanie na https, HSTS, max-age, includeSubDomains, preload, nagłówek HTTP, Content-Security-Policy, X-Content-Type-Options, frame-ancestors, X-Frame-Options, Referrer-Policy
Co się dzieje, gdy ktoś otwiera Państwa stronę
Gdy klient wpisze example.com w pasku adresu, przeglądarka żąda strony od Państwa serwera www. Ta komunikacja odbywa się przez HTTP. Przy https wokół niej znajduje się szyfrowane połączenie: TLS. W tym celu Państwa strona potrzebuje certyfikatu TLS (często nadal nazywanego certyfikatem SSL). Certyfikat potwierdza, że serwer rzeczywiście należy do example.com, a szyfrowanie zapewnia, że nikt po drodze nie może podsłuchiwać ani niczego zmieniać. Jest to ważne w publicznej sieci wifi, gdzie nie wiedzą Państwo, kto zarządza siecią (lekcja 5.3).
Przy każdej odpowiedzi serwer, oprócz samej strony, wysyła szereg nagłówków: krótkich linijek z informacjami i instrukcjami dla przeglądarki. Nie widać ich na ekranie, ale w dużej mierze decydują o tym, jak bezpiecznie przeglądarka traktuje Państwa stronę. Część tych nagłówków to nagłówki bezpieczeństwa. W tej lekcji omówimy cztery warstwy: certyfikat, przekierowanie, HSTS i nagłówki. Następnie krótko zajmiemy się aktualizacją samej strony internetowej.
Warstwa 1: ważny certyfikat
Certyfikat jest w porządku, jeśli spełnia trzy warunki:
- nie jest przeterminowany;
- został wydany przez zaufanego wystawcę (urząd certyfikacji znany przeglądarkom, taki jak Let's Encrypt lub podmiot komercyjny);
- obowiązuje dla dokładnie tej nazwy, którą otwiera odwiedzający:
example.comorazwww.example.com, jeśli Państwo korzystają z obu.
Niemal każdy dostawca hostingu obecnie zapewnia darmowy certyfikat, który jest automatycznie odnawiany. Jeśli coś pójdzie nie tak, zwykle wynika to z tego, że nazwa domeny wskazuje na inny serwer, albo rekord CAA blokuje danego wystawcę (lekcja 4.3).
Ważne, aby wiedzieć: kłódka nie mówi nic o wiarygodności strony. Oznacza jedynie, że połączenie jest zaszyfrowane i że certyfikat odpowiada nazwie w pasku adresu. Strony phishingowe na mijnbank-veilig.example mają równie dobrze kłódkę. Dlatego w lekcji 3.2 uczą się Państwo odczytywać domenę.
Warstwa 2: zawsze przekierowanie na https
Sam certyfikat nie wystarczy. Ktoś, kto otworzy http://example.com, na przykład przez stary link lub wpisując samą nazwę, powinien zostać automatycznie przekierowany na wersję https. Nazywa się to przekierowaniem (redirect, zwykle z kodem statusu 301).
Prawidłowa kolejność wygląda tak:
http://example.com -> https://example.com
https://example.com -> https://www.example.com (tylko jeśli www jest Państwa adresem głównym)
http://www.example.com -> https://www.example.comProszę zwrócić uwagę na pierwszą linijkę: z http przekierowują Państwo najpierw na https na tej samej nazwie, a dopiero potem ewentualnie na www. Dzięki temu przeglądarka może odebrać instrukcję HSTS również z nazwy bez www. Internet.nl sprawdza dokładnie to.
Częstym błędem jest podwójne przekierowanie: w panelu hostingowym oraz we wtyczce lub w pliku .htaccess. Może to spowodować nieskończoną pętlę ("zbyt wiele przekierowań"). Proszę skonfigurować to w jednym miejscu.
Warstwa 3: HSTS
Przekierowanie ma słaby moment: pierwsze żądanie wciąż przechodzi nieszyfrowane przez http. Napastnik w tej samej sieci może przechwycić to jedno żądanie i utrzymać odwiedzającego na podrobionej, nieszyfrowanej wersji strony. Do tego służy HSTS (HTTP Strict Transport Security, RFC 6797).
Przy HSTS Państwa strona wysyła przez https dodatkowy nagłówek:
Strict-Transport-Security: max-age=31536000; includeSubDomainsPrzeglądarka zapamiętuje wtedy: "tę stronę otwieraj wyłącznie przez https, przez najbliższe 31 536 000 sekund (rok)". Jeśli odwiedzający wpisze później http://example.com, przeglądarka sama zamieni to na https, zanim cokolwiek zostanie wysłane przez sieć. Słabe pierwsze żądanie znika.
| Element | Znaczenie |
|---|---|
max-age= | Jak długo przeglądarka to pamięta, w sekundach. Internet.nl uznaje co najmniej rok (max-age=31536000) za wystarczające; krótki okres nie chroni osób, które odwiedzają Państwa stronę jedynie od czasu do czasu. |
includeSubDomains | Obowiązuje również dla wszystkich subdomen, takich jak shop.example.com i mail.example.com. |
preload | Wnioskują Państwo o umieszczenie na liście wbudowanej w przeglądarki (hstspreload.org). Wtedy chronione jest nawet pierwsze w ogóle odwiedzenie strony. Wymagania obejmują między innymi max-age wynoszące co najmniej rok, includeSubDomains oraz wszystkie subdomeny działające na https. Usunięcie z listy trwa długo. |
max-age=0 | Usuwa zapamiętaną instrukcję. |
Trzy rzeczy, które warto wiedzieć, zanim włączą Państwo HSTS:
- Najpierw https musi działać wszędzie. Przeglądarka, która zapamiętała HSTS i napotyka błąd certyfikatu, nie pokazuje odwiedzającemu przycisku, by mimo to kontynuować (RFC 6797, paragraf 12.1). Jeśli Państwa certyfikat wygaśnie albo nie pasuje do
www, strona będzie dla tych odwiedzających niedostępna, dopóki problem nie zostanie rozwiązany. includeSubDomainsdotyczy wszystkiego pod Państwa domeną. Stare subdomeny bez certyfikatu, na przykład strona drukarki lub kamery nacamera.example.com, po włączeniu tej opcji nie będzie już dostępna.- Wprowadzajcie Państwo to stopniowo. Proszę zacząć od krótkiego
max-age(na przykład jednego dnia), sprawdzić, czy wszystko działa, a następnie zwiększać je stopniowo do roku. Przy każdym kroku proszę odczekać cały ten okres.
Nagłówek HSTS otrzymany przez zwykłe http jest ignorowany przez przeglądarkę. Widać go zatem jedynie w odpowiedzi https.
Warstwa 4: nagłówki bezpieczeństwa
Oprócz HSTS istnieje kilka nagłówków, które informują przeglądarkę, co wolno jej robić z Państwa stronami, a czego nie. Nie muszą Państwo mieć ich wszystkich idealnie skonfigurowanych, ale pierwsze trzy są proste i bezpieczne.
| Nagłówek | Przed czym chroni | Dobra wartość |
|---|---|---|
X-Content-Type-Options | Przeglądarka sama zgaduje, czym jest dany plik, przez co przesłany "obrazek" może zostać wykonany jako skrypt. | nosniff (jedyna prawidłowa wartość) |
Content-Security-Policy: frame-ancestors ... lub X-Frame-Options | Clickjacking: inna strona ładuje Państwa stronę niewidocznie w ramce i pozwala odwiedzającym niepostrzeżenie klikać na Państwa przyciski. | frame-ancestors 'self' lub 'none'; starszy nagłówek X-Frame-Options: SAMEORIGIN lub DENY |
Referrer-Policy | Przy przejściu na inną stronę przeglądarka wysyła adres poprzedniej strony. Może on zawierać wrażliwe informacje, takie jak wyszukiwana fraza czy numer zamówienia. | no-referrer lub same-origin (surowe), strict-origin-when-cross-origin (powszechne, internet.nl wyświetla tu ostrzeżenie) |
Content-Security-Policy (pełna) | Ogranicza, z jakich miejsc mogą być ładowane skrypty, style i obrazy. Znacznie utrudnia wstrzyknięcie złośliwych skryptów (XSS). | Rozwiązanie dopasowane do konkretnej strony. Proszę unikać unsafe-inline, unsafe-eval i symboli wieloznacznych. |
Pełna Content-Security-Policy jest najskuteczniejsza, ale też najtrudniejsza: zbyt restrykcyjna reguła może zepsuć Państwa statystyki, przycisk płatności lub okno czatu. Dzięki wariantowi Content-Security-Policy-Report-Only mogą Państwo najpierw zmierzyć, co zostałoby zablokowane, bez psucia czegokolwiek. Proszę pozostawić to swojemu twórcy strony internetowej lub zacząć jedynie od frame-ancestors.
Samodzielne sprawdzenie nagłówków
Proszę otworzyć swoją stronę w przeglądarce, nacisnąć F12 (lub wybrać "Zbadaj"), przejść na kartę Sieć, ponownie załadować stronę i kliknąć pierwsze żądanie. Pod "Nagłówki odpowiedzi" (Response Headers) widoczne jest wszystko, co wysyła serwer. Da się to zrobić także z poziomu wiersza poleceń:
curl -sI https://example.com/Sama strona internetowa: CMS, wtyczki i motywy
Najlepsze nagłówki nie pomogą, jeśli oprogramowanie stojące za Państwa stroną jest dziurawe. Większość zhakowanych stron małych firm nie została zaatakowana przez serwer www, lecz przez przestarzałą wtyczkę, motyw, który od lat nie był aktualizowany, lub słabe hasło administratora.
- Proszę włączyć automatyczne aktualizacje dla swojego CMS (na przykład WordPress, Joomla lub innego systemu) oraz dla wtyczek, jeśli to możliwe.
- Proszę usunąć wtyczki i motywy, których Państwo nie używają; samo wyłączenie nie wystarczy, pliki nadal tam są.
- Do logowania administratora proszę stosować silne, unikalne hasło oraz uwierzytelnianie dwuskładnikowe (moduł 2), a także ograniczyć liczbę prób logowania.
- Proszę utrzymywać wersję PHP (lub innego języka) Państwa pakietu na poziomie, który nadal otrzymuje aktualizacje (lekcja 5.1).
W praktyce: tak to wygląda
W DirectAdmin, panelu, z którego korzysta WebOké, przy swojej domenie najpierw włączają Państwo Bezpieczny SSL, a następnie Wymuś SSL z przekierowaniem https. W tym samym miejscu znajduje się przełącznik dla HSTS; proszę włączyć go dopiero wtedy, gdy certyfikat działa dla wszystkich nazw. U innych dostawców działa to podobnie, albo konfigurują to Państwo w ustawieniach swojego CMS.
Jeśli Państwa strona działa na Apache lub LiteSpeed, nagłówki można również umieścić w pliku .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>Proszę dodać includeSubDomains dopiero wtedy, gdy mają Państwo pewność, że każda subdomena obsługuje https. Po każdej zmianie proszę sprawdzić wynik za pomocą testu strony internetowej internet.nl lub narzędzi deweloperskich przeglądarki.
Podsumowanie
- Kłódka oznacza: szyfrowane i właściwa nazwa. Nie oznacza: wiarygodne.
- Zawsze przekierowują Państwo http na https, najpierw na tej samej nazwie, i robią to w jednym miejscu.
- HSTS sprawia, że przeglądarka zapamiętuje, iż Państwa strona działa wyłącznie przez https; internet.nl uznaje
max-agewynoszące co najmniej rok (31536000) za dobre. Proszę włączyć to dopiero, gdy https działa wszędzie, i wprowadzać stopniowo. X-Content-Type-Options: nosniff,frame-ancestors(lubX-Frame-Options) orazReferrer-Policysą proste; pełna Content-Security-Policy wymaga indywidualnego podejścia.- Aktualizacje Państwa CMS, wtyczek i motywów są co najmniej tak samo ważne jak nagłówki.
Quiz
Zadanie
Zadanie A4.2: Sprawdzanie https, HSTS i nagłówków swojej strony internetowej. Proszę wpisać nazwę domeny swojej strony internetowej (jeśli Państwo jej nie mają, proszę użyć internet.nl). Program otwiera http:// i https:// Państwa domeny i sprawdza certyfikat, przekierowanie na https, HSTS oraz nagłówki bezpieczeństwa. Przy każdym punkcie otrzymają Państwo kolor zielony, pomarańczowy lub czerwony wraz z wyjaśnieniem.
Zadanie D4.2: Aktualizacja i porządkowanie strony internetowej. Proszę zalogować się do panelu zarządzania swoją stroną internetową, sprawdzić wersję swojego CMS, wtyczek i motywów, usunąć to, czego Państwo nie używają, i włączyć automatyczne aktualizacje tam, gdzie to możliwe. Proszę odhaczyć listę kontrolną i odpowiedzieć na pytanie refleksyjne.
Zadanie D4.2: Aktualizacja i porządkowanie strony internetowej
Jak się do tego zabrać: (1) Proszę zalogować się do panelu zarządzania stroną internetową (lub poprosić twórcę strony o wspólne wykonanie tego). (2) Proszę zanotować wersję CMS i sprawdzić, czy są dostępne aktualizacje. (3) Proszę wykonać kopię zapasową (lekcja 6.1), zainstalować aktualizacje CMS, wtyczek i motywów. (4) Proszę usunąć nieużywane wtyczki i motywy. (5) Proszę włączyć automatyczne aktualizacje tam, gdzie to możliwe. (6) Proszę sprawdzić, jakie konta administratora istnieją, i usunąć konta osób, które już nie pracują w firmie. (7) Proszę włączyć uwierzytelnianie dwuskładnikowe (2FA) dla każdego konta administratora.
Zaznaczenia i notatki pozostają tylko w tej przeglądarce; nie są nigdzie wysyłane. Po zalogowaniu w Moje kursy zapisywana jest jedynie informacja, że zadanie zostało wykonane.
Więcej informacji
Kroki opisane w artykułach WebOké dotyczą środowiska WebOké; u innych dostawców działa to w podobny sposób.
- Aktywacja, odnawianie i rozwiązywanie problemów z certyfikatem SSL
- Wymuszone przekierowanie odwiedzających na https
- Instrukcja DirectAdmin 6.4: Zawsze przekierowuj odwiedzających na https
- Instrukcja DirectAdmin 6.7: Brak kłódki lub komunikat "niepewne": rozwiązywanie problemu mixed content
- Instrukcja DirectAdmin 15.10: Zapora sieciowa aplikacji internetowych
- Zabezpieczenie wp-login.php w WordPressie
- Internet.nl, test strony internetowej (niezależny): https://internet.nl
- RFC 6797, HTTP Strict Transport Security: https://www.rfc-editor.org/rfc/rfc6797
- Lista preload HSTS: https://hstspreload.org
- MDN, wyjaśnienie nagłówków (w j. angielskim): https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security
