Nagłówki HSTS i nagłówki bezpieczeństwa dla Państwa strony internetowej
Przy każdej stronie Państwa serwer wysyła nagłówki: krótkie wiersze z instrukcjami dla przeglądarki. Określają one między innymi, jak bezpiecznie przeglądarka obchodzi się z Państwa stroną. Poniżej dowiedzą się Państwo, czym jest HSTS, jakie są inne nagłówki bezpieczeństwa oraz jak je ustawić i przetestować.
Najpierw Państwa strona musi mieć działający certyfikat i przekierowywać odwiedzających na https. Informacje na ten temat znajdą Państwo w artykułach Aktywacja, odnowienie 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 jest jeszcze niezaszyfrowane. Ktoś w tej samej sieci, na przykład w publicznym wifi, może to żądanie przechwycić. HSTS (HTTP Strict Transport Security) rozwiązuje ten problem. Państwa strona wysyła przez https następujący nagłówek:
Strict-Transport-Security: max-age=31536000
Przeglądarka zapamiętuje wtedy, że może otwierać Państwa stronę wyłącznie przez https. Jeśli odwiedzający wpisze później http://, przeglądarka sama zamieni to na https, jeszcze zanim cokolwiek zostanie wysłane przez sieć. Nagłówek HSTS, który dociera przez zwykłe http, jest przez przeglądarkę ignorowany.
| 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 kolejnej wizycie przez https. |
includeSubDomains dotyczy to także każdej subdomeny, na przykład starej strony kamery lub drukarki bez certyfikatu. Dlatego warto budować to stopniowo: proszę zacząć od krótkiego max-age, na przykład jednego dnia (86400), sprawdzić, czy wszystko działa, i zwiększać wartość krok po kroku do roku.HSTS w WebOké
Na większości naszych serwerów serwer WWW domyślnie wysyła HSTS dla każdej strony otwieranej przez https: Strict-Transport-Security: max-age=31536000. Jest to rok, bez includeSubDomains i bez preload. Nie muszą Państwo w tym celu nic robić. Na kilku serwerach nie jest to domyślnie włączone; tam włączają to Państwo samodzielnie. Czy Państwa strona wysyła już HSTS i z jaką wartością max-age, mogą Państwo sprawdzić w narzędziach deweloperskich przeglądarki lub w teście internet.nl (patrz poniżej).
Przełącznik HSTS w DirectAdmin
W DirectAdmin przechodzą Państwo do Domains i klikają na nazwę domeny. Jeśli opcja Secure SSL Connection jest włączona, przy HSTS zobaczą Państwo przełącznik Enable HTTP Strict Transport Security. Następnie proszę kliknąć Modify, aby zapisać. Informacje krok po kroku znajdą Państwo w artykule Zawsze przekierowuj odwiedzających na https.
Jeśli Państwa strona wysyła już HSTS, przełącznik nie jest potrzebny. Proszę włączyć go tylko wtedy, gdy strona jeszcze nie wysyła HSTS. Proszę ustawić HSTS w jednym miejscu: w DirectAdmin albo w .htaccess, nie w obu naraz. 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 zgaduje, czym jest plik, przez co przesłany "obrazek" może zostać wykonany jako skrypt. | nosniff (jedyna poprawna wartość) |
Content-Security-Policy: frame-ancestors lub X-Frame-Options | Clickjacking: inna strona niewidocznie ładuje Państwa stronę w ramce (frame), tak że odwiedzający nieświadomie klikają w Państwa przyciski. | frame-ancestors 'self', lub starszy nagłówek X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Przy kliknięciu linku do innej strony 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 poprawne tylko te bardziej restrykcyjne wartości. |
Permissions-Policy | Określa, z jakich funkcji przeglądarki mogą korzystać Państwa strona i osadzone ramki, takich jak kamera, mikrofon i lokalizacja. | camera=(), microphone=(), geolocation=() wyłącza te trzy funkcje. Jeśli Państwa strona korzysta z jednej z nich, proszę ją pominąć. |
Content-Security-Policy (pełny) | Ogranicza, skąd mogą być ładowane skrypty, style i obrazy. To znacznie utrudnia wstrzyknięcie złośliwych skryptów (XSS). | Rozwiązanie dostosowane do konkretnej strony. Proszę unikać unsafe-inline, unsafe-eval i symboli wieloznacznych. |
Ustawianie w .htaccess
Proszę umieścić te wiersze na początku pliku .htaccess w katalogu public_html Państwa domeny. Najpierw 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 Państwa strona nie wysyła jeszcze HSTS (patrz powyżej): # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Proszę dodać includeSubDomains dopiero wtedy, gdy mają Państwo pewność, że każda subdomena obsługuje 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 lub zacząć wyłącznie od frame-ancestors.Testowanie
- Internet.nl: proszę wpisać swoją domenę w teście strony na stronie internet.nl.
- Przeglądarka: proszę otworzyć stronę, nacisnąć F12 (lub wybrać Zbadaj), przejść do zakładki Sieć, ponownie załadować stronę i kliknąć pierwsze żądanie. W sekcji Nagłówki odpowiedzi (Response Headers) zobaczą Państwo wszystko, co wysyła Państwa serwer.
- Wiersz poleceń:
curl -sI https://twojadomena.nl/wyświetla nagłówki.
Po każdej zmianie proszę sprawdzić, czy Państwa strona, formularze i strona płatności nadal działają. Proszę ponadto aktualizować system CMS, wtyczki i motywy. Zobacz Zabezpieczanie wp-login.php w WordPressie.
Więcej informacji
- MDN: Strict-Transport-Security (w języku angielskim)
- MDN: Content-Security-Policy (w języku angielskim)
- MDN: Permissions-Policy (w języku angielskim)
- Lista preload HSTS (w języku angielskim)
