Nagłówki HSTS i zabezpieczeń dla Państwa strony internetowej
Przy każdej stronie serwer WWW wysyła nagłówki: krótkie linie z instrukcjami dla przeglądarki. Decydują one częściowo o tym, jak bezpiecznie przeglądarka obchodzi się z Państwa stroną. Tutaj dowiedzą się Państwo, czym jest HSTS, jakie inne nagłówki bezpieczeństwa istnieją oraz jak je ustawić i przetestować.
Najpierw strona musi mieć działający certyfikat i przekierowywać odwiedzających na https. Przeczytają Państwo o tym w artykułach Aktywacja, odnawianie certyfikatu SSL i rozwiązywanie problemów oraz Obowiązkowe przekierowanie odwiedzających na https.
Co robi HSTS?
Przekierowanie na https ma jeden słaby moment: pierwsze żądanie przez http wciąż przechodzi niezaszyfrowane. Ktoś w tej samej sieci, na przykład w publicznym wi-fi, może to żądanie przechwycić. HSTS (HTTP Strict Transport Security) rozwiązuje ten problem. Strona wysyła przez https następujący nagłówek:
Strict-Transport-Security: max-age=31536000
Przeglądarka zapamiętuje wówczas, że może otwierać stronę wyłącznie przez https. Jeśli odwiedzający wpisze później http://, przeglądarka sama zamieni to na https, zanim cokolwiek zostanie wysłane przez sieć. Nagłówek HSTS, który dociera przez zwykłe http, przeglądarka ignoruje.
| Element | Znaczenie |
|---|---|
max-age | Jak długo przeglądarka to zapamiętuje, w sekundach. Test internet.nl uznaje co najmniej rok (31536000) za wystarczający. |
includeSubDomains | Dotyczy również wszystkich subdomen, takich jak shop.twojadomena.nl i mail.twojadomena.nl. |
preload | Proszą Państwo o umieszczenie na liście wbudowanej w przeglądarki (hstspreload.org). Wtedy chroniona jest nawet sama pierwsza wizyta. Wymaga to między innymi roku, includeSubDomains oraz https na wszystkich subdomenach. Usunięcie z listy trwa długo. |
max-age=0 | Usuwa zapamiętaną instrukcję, przy następnej wizycie przez https. |
includeSubDomains dotyczy to także każdej subdomeny, na przykład starej strony kamery lub drukarki bez certyfikatu. Dlatego proszę budować to stopniowo: proszę zacząć od krótkiego max-age, na przykład jednego dnia (86400), sprawdzić, czy wszystko działa, i stopniowo zwiększać do roku.Przełącznik HSTS w DirectAdmin
W DirectAdmin proszę przejść do Domeny i kliknąć na nazwę domeny. Jeśli opcja Bezpieczne połączenie SSL jest włączona, przy HSTS zobaczą Państwo przełącznik Włącz HTTP Strict Transport Security. Następnie proszę kliknąć Zapisz, aby zapisać zmiany. Jak to wygląda krok po kroku, przeczytają Państwo w artykule Zawsze przekierowuj odwiedzających na https.
Jeśli chcą Państwo sprawdzić, jaką wartość max-age wysyła strona, proszę spojrzeć w narzędzia deweloperskie przeglądarki lub w test internet.nl (patrz niżej). Proszę ustawić HSTS tylko w jednym miejscu: w DirectAdmin albo w .htaccess, nie w obu jednocześnie. Jeśli przeglądarka otrzyma dwa nagłówki HSTS, użyje tylko pierwszego.
Pozostałe nagłówki bezpieczeństwa
| Nagłówek | Przed czym chroni | Wartość początkowa |
|---|---|---|
X-Content-Type-Options | Przeglądarka sama próbuje odgadnąć rodzaj pliku, 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 niewidocznie Państwa stronę w ramce (frame), dzięki czemu odwiedzający niezauważenie klikają w Państwa przyciski. | frame-ancestors 'self', lub starszy nagłówek X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Przy kliknięciu na inną stronę przeglądarka wysyła adres poprzedniej strony, czasem wraz z frazą wyszukiwania lub numerem zamówienia. | strict-origin-when-cross-origin, lub bardziej restrykcyjnie same-origin albo no-referrer. Internet.nl uznaje za prawidłowe tylko restrykcyjne wartości. |
Permissions-Policy | Określa, które funkcje przeglądarki mogą być używane przez stronę i osadzone ramki, takie jak kamera, mikrofon i lokalizacja. | camera=(), microphone=(), geolocation=() wyłącza te trzy funkcje. Jeśli strona korzysta z jednej z nich, proszę ją pominąć. |
Content-Security-Policy (pełna) | Ogranicza miejsca, z których mogą być ładowane skrypty, style i obrazy. Utrudnia to znacznie wstrzykiwanie złośliwych skryptów (XSS). | Rozwiązanie dostosowane do konkretnej strony. Proszę unikać unsafe-inline, unsafe-eval i znaków wieloznacznych (wildcard). |
Konfiguracja w .htaccess
Proszę umieścić te linie na początku pliku .htaccess w folderze public_html Państwa domeny. Przed tym proszę wykonać kopię pliku.
<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=()" # Tylko jeśli przełącznik HSTS w DirectAdmin jest wyłączony: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Proszę dodać includeSubDomains dopiero wtedy, gdy mają Państwo pewność, że każda subdomena posiada https. Jeśli korzystają Państwo z WordPressa, nagłówki można również ustawić za pomocą wtyczki. Proszę wybrać znaną wtyczkę, która jest nadal aktualizowana, i ustawić każdy nagłówek w jednym miejscu: we wtyczce albo w .htaccess.
Content-Security-Policy-Report-Only. Nie blokuje on niczego, ale pokazuje w konsoli przeglądarki, co zostałoby zablokowane. W razie wątpliwości proszę pozostawić to swojemu twórcy strony, albo zacząć wyłącznie od frame-ancestors.Testowanie
- Internet.nl: proszę wpisać swoją domenę w teście strony na internet.nl.
- Przeglądarka: proszę otworzyć stronę, nacisnąć F12 (lub wybrać Zbadaj), przejść do zakładki Sieć (Network), ponownie załadować stronę i kliknąć pierwsze żądanie. Pod Nagłówki odpowiedzi (Response Headers) zobaczą Państwo wszystko, co wysyła serwer.
- Wiersz poleceń:
curl -sI https://twojadomena.nl/pokazuje nagłówki.
Po każdej zmianie proszę sprawdzić, czy strona, formularze i strona płatności nadal działają. Proszę ponadto aktualizować swój CMS, wtyczki i motywy. Zobacz Zabezpieczanie wp-login.php WordPressa.
Dalsza lektura
- MDN: Strict-Transport-Security (angielski)
- MDN: Content-Security-Policy (angielski)
- MDN: Permissions-Policy (angielski)
- Lista preload HSTS (angielski)
