Nagłówki bezpieczeństwa – wprowadzenie
Czasem poszukujemy informacji na temat poprawy poziomu bezpieczeństwa poszczególnych obszarów naszego życia i otaczającej nas rzeczywistości. Jednym z tych obszarów może być posiadana przez nas witryna internetowa. W tym artykule postaram się w prosty sposób opisać, jak zadbać o nagłówki bezpieczeństwa – bez zagłębiania się w szczegóły techniczne, tak aby każdy użytkownik WordPressa mógł sobie z tym poradzić.
Zacznijmy od podstawowych informacji – jak wiemy, każda strona komunikuje się z użytkownikiem przy użyciu protokołu HTTP (ang. Hypertext Transfer Protocol) – protokół przesyłania dokumentów hipertekstowych. Zazwyczaj są one używane do przekazywania informacji technicznych, takich jak sposób, w jaki przeglądarka powinna buforować zawartość, jaki jest typ zawartości, oprogramowanie działające na serwerze i wiele, wiele więcej. Obecnie nagłówki HTTP wykorzystuje się do przekazywania zasad bezpieczeństwa do przeglądarki. Dzięki przekazywaniu zasad bezpieczeństwa z powrotem do klienta w ten sposób, hosty mogą zapewnić znacznie bezpieczniejsze przeglądanie stron przez odwiedzających, a także zmniejszyć ryzyko dla wszystkich zainteresowanych.
Zabezpieczenie witryny – certyfikat SSL
Stronę internetową możemy zabezpieczyć certyfikatem SSL. Możemy użyć certyfikatów komercyjnych lub bezpłatnego certyfikatu Let’s Encrypt. W repozytorium WordPressa znajdziemy wtyczki, które pomagają zainstalować certyfikat SSL. Jedną z nich jest Really Simple SSL. Można to zrobić również bez instalacji wtyczki, ale jest to zadanie bardziej złożone. Po instalacji certyfikatu SSL podstawowy nagłówek komunikacji HTTP przyjmuje wartość HTTPS. Bezpłatna wersja wtyczki, o której wyżej wspomniałem poinformuje nas między innymi, że zalecane jest zabezpieczenie dodatkowych nagłówków – w tym przypadku opcje dostępne w wersji premium. Nie musimy od razu kupować wersji premium, gdyż możemy samodzielnie odpowiednio skonfigurować ustawienia w swojej witrynie.
Przedstawione poniżej nagłówki dają przeglądarce więcej informacji o tym, jak chcesz, aby zachowywała się w odniesieniu do Twojej witryny. Mogą one być używane do przekazywania zasad bezpieczeństwa, ustawiania opcji konfiguracyjnych i wyłączania funkcji przeglądarki, których nie chcesz włączać dla swojej witryny. Aby je wdrożyć, możesz dodać nagłówki wymienione poniżej do pliku .htaccess swojej witryny. Zaloguj się przez FTP do swojej witryny i znajdź plik .htaccess. Jeśli go nie ma, możesz go utworzyć w notatniku Windowsa, choć ja preferuję program Notepad++ i wyślij go na serwer. Pamiętajmy, że najważniejsze jest bezpieczeństwo naszej witryny, więc przed jakąkolwiek modyfikacją pliku .htaccess należy bezwzględnie utworzyć jego kopię, aby w przypadku niepowodzenia wrócić do wersji sprzed zmian. Po skonfigurowaniu każdego nagłówka, sprawdź go, używając skanera https://securityheaders.com/
HTTP Strict Transport Security
Konfiguracja tego nagłówka wymaga wcześniejszego zainstalowania certyfikatu SSL. Następnie przy użyciu wyżej wymienionej wtyczki następuje przekierowanie z przeglądania stron przez HTTP na HTTPS. Jeśli nie używamy wtyczek do przekierowania, w pliku .htaccess umieszczamy odpowiednie polecenia:
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
HTTP Strict Transport Security (HSTS) informuje przeglądarkę, że zawsze chcesz, aby użytkownik łączył się za pomocą HTTPS zamiast HTTP. Oznacza to, że wszelkie zakładki, linki lub adresy, które użytkownik wpisuje, będą zmuszone do korzystania z HTTPS, nawet jeśli użytkownik wpisze HTTP. Po ustawieniu HSTS komunikacja przeglądarki z serwerem odbywa się wyłącznie przez bezpieczne połączenie. Wstawiamy więc kod:
Header always set Strict-Transport-Security max-age=31536000; includeSubDomains
Ta polityka będzie egzekwować TLS (ang. Transport Layer Security) – przyjęte jako standard w Internecie rozwinięcie protokołu SSL – na Twojej stronie i wszystkich subdomenach przez rok. Według informacji podawanych przez Google, witryny wykorzystujące HSTS dodawane są do listy najlepszych domen internetowych, co powoduje, że jednocześnie są wyżej pozycjonowane. Jest to więc jeden z kroków do optymalizacji SEO naszej witryny.
Content Security Policy
Dzięki CSP możesz zdefiniować, z jakich domen Twoja strona może ładować zasoby, takie jak obrazy, arkusze stylów, pliki javascript itp. Jest to jeden z bardziej zaawansowanych nagłówków. Ze względu na modułową naturę WordPressa, każda wtyczka i motyw może dodać własne zasoby, takie jak Google Fonts. Również usługi społecznościowe, takie jak Facebook, Instagram, Google Maps, itp, będą ładować zewnętrzne zasoby. Nagłówek CSP pozwala na zdefiniowanie białej listy zatwierdzonych źródeł treści dla Twojej witryny. CSP może działać jako skuteczny środek zaradczy dla ataków XSS (ang. Cross Site Scripting), czyli próby umieszczenia w witrynach internetowych kodu, który zmieni ich treść lub funkcjonalność. Poniżej przedstawiam podstawową politykę wymuszania TLS:
Header always set Content-Security-Policy default-src https: data: 'unsafe-inline' 'unsafe-eval'
CSP posiada ogromną liczbę funkcji, które mogą mieć wpływ na funkcjonalność Twojej witryny – należy stosować je z rozwagą. W razie konieczności pamiętamy o tym, że przed wprowadzeniem zmian wykonujemy kopię pliku .htaccess. Bezpieczeństwo nagłówków CSP możemy indywidualnie zdefiniować używając generatora online na stronie https://report-uri.com/home/generate.
X-Frame-Options
Nagłówek X-Frame-Options chroni odwiedzających przed atakami typu clickjacking. Atakujący może załadować ramkę iframe na swojej stronie i ustawić Twoją stronę jako źródło. Używając sprytnego CSS, może ukryć Twoją witrynę w tle i stworzyć autentycznie wyglądające nakładki. Kiedy odwiedzający klikają na to, co wydaje im się nieszkodliwym linkiem, w rzeczywistości klikają na linki na Twojej stronie w tle. To może nie wydawać się takie złe, dopóki nie uświadomimy sobie, że przeglądarka wykona te żądania w kontekście użytkownika, który może być zalogowany i uwierzytelniony na Twojej stronie. Poprawne wartości to DENY, co oznacza, że Twoja strona nie może być obramowana, SAMEORIGIN, co pozwala na obramowanie Twojej własnej strony lub ALLOW-FROM https://example.com/, co pozwala na określenie stron, które mogą być obramowane na Twojej wiytynie. Dopisujemy więc kod:
Header always set X-Frame-Options SAMEORIGIN
X-Xss-Protection
Ten nagłówek stosuje się do konfiguracji wbudowanej ochrony przed atakami XSS w Internet Explorerze, Chrome i Safari. Istnieją trzy wartości ustawienia dla tego nagłówka:
– 0 – wyłącza ochronę,
– 1 – włącza ochronę,
– 1; mode=block – który mówi przeglądarce, aby zablokować odpowiedź, jeśli wykryje atak, zamiast oczyszczać skrypt. Dopisujemy kolejny kod:
Header always set X-Xss-Protection 1; mode=block
X-Content-Type-Options
Jest to łatwy do skonfigurowania nagłówek, który ma tylko jedną poprawną wartość – nosniff. Ten nagłówek zmusi przeglądarkę, aby nie „zgadywała” jaki rodzaj danych jest przekazywany. Jeśli rozszerzeniem jest „.zip”, przeglądarka powinna otrzymać plik .zip, a nie coś innego (.exe). W przeciwnym razie przeglądarka może zostać podstępnie zmuszona do wykonania skryptu, podczas gdy użytkownik myśli, że pobiera bezpieczny plik. W naszym pliku .htaccess dopisujemy kod:
Header always set X-Content-Type-Options nosniff
Szerzej o tym nagłówku przeczytasz w tym artykule.
Permissions Policy
Permissions Policy jest dodatkową warstwą bezpieczeństwa, która pomaga ograniczyć nieautoryzowany dostęp lub wykorzystanie funkcji przeglądarki/klienta przez zasoby sieciowe. Nagłówek HTTP Permissions-Policy zastępuje istniejący nagłówek Feature-Policy do kontroli delegacji uprawnień. Używa on ustrukturyzowanej składni i pozwala witrynom na ściślejsze ograniczenie tego, które źródła mogą uzyskać dostęp do funkcji. Permissions Policy pozwala określić, które funkcje przeglądarek mogą być używane przez witrynę, takie jak kamera, mikrofon, lokalizacja, pełny ekran itp. Sam decydujesz o ograniczeniach umieszczonych na swojej stronie. Dla przykładu kod:
Header set Permissions-Policy: geolocation=(self "https://example.com"), microphone=()
pozwala na własną geolokalizację witryny https://example.com i nie zezwala na użycie mikrofonu.
Inne możliwości wykorzystania nagłówka tego przedstawiam w artykule Permissions Policy.
Referrer Policy
Referrer Policy pozwala witrynie kontrolować wartość nagłówka referrer w linkach odsyłających z ich stron. Jego funkcjonowanie można przedstawić następująco: gdy użytkownik klika link na jednej stronie, źródłowej, która przenosi go na inną stronę, docelową, strona docelowa otrzymuje informacje o źródle, z którego przyszedł użytkownik. W ten sposób otrzymujemy metryki, takie jak te dostarczane przez Google Analytics, dotyczące tego, skąd pochodzi nasz ruch. Dla bezpieczeństwa naszej witryny warto ustawić parametr:
Referrer-Policy: no-referrer-when-downgrade
który wymusza używanie tego samego protokołu i nie pozwala na jego obniżenie (HTTPS -> HTTP). W ten sposób przekierowanie nigdy nie będzie wymuszało zmiany przejścia na mniej bezpieczny protokół (http).
Expect-CT
Urząd Certyfikacji (wystawca certyfikatu SSL) musi rejestrować wydawane certyfikaty w osobnym dzienniku, w ramach CT (Certificate Transparency). Dzięki temu dziennikowi nieuczciwe Urzędy mogą być szybciej wykryte, a nieprawidłowo wystawione certyfikaty mogą być szybko usunięte. Do naszego pliku dodajemy kolejną linijkę kodu:
Expect-CT: enforce, max-age=30
Przeglądarka będzie teraz buforować i egzekwować tę politykę na wszystkich połączeniach z twoją witryną przez następne 30 sekund. Jeśli na stronie nie wystąpią problemy z funkcjonalnością, możesz stopniowo zwiększać tę wartość, np do minuty, potem 15 minut, godziny, dnia, tygodnia i tak dalej.
Inne nagłówki bezpieczeństwa
Inne nagłówki to Cross-Origin Resource Sharing (CORS), Cross-Origin Resource Policy (CORP), Cross-Origin-Embedder-Policy (COEP) i Cross-Origin-Opener-Policy (COOP). Nagłówki te zapobiegają kilku rodzajom ataków, z których najważniejszym jest Spectre. Korzystanie z niektórych web API może zwiększyć ryzyko ataków takich jak Spectre. Aby zmniejszyć to ryzyko, te nowe nagłówki próbują osiągnąć „cross origin isolation”. Nie jest to możliwe we wszystkich konfiguracjach, ale każdy dodany nagłówek poprawia bezpieczeństwo Twojej strony.
Powyższe nagłówki (CORS, CORP, COEP i COOP) nie mają aktualnie bezpośredniego wpływu na ocenę bezpieczeństwa Twojej witryny. Więcej informacji znajdziesz na stronie https://scotthelme.co.uk/coop-and-coep/.
Nagłówki bezpieczeństwa – podsumowanie
Każdy z użytkowników ma bezpośredni wpływ na bezpieczeństwo swojej witryny. Bywa tak, że użytkownik nie jest świadomy pewnych zagrożeń lub zdaje sobie sprawę, że istnieją, ale z różnych przyczyn je ignoruje. Uważam, że warto poświęcić trochę czasu, aby nasza witryna posiadała określone zabezpieczenia. Jednym z tych zabezpieczeń jest certyfikat SSL, innym nagłówki bezpieczeństwa. Zachęcam do stosowania obu rozwiązań. Można to obrazowo porównać do zabezpieczenia domu. Certyfikat SSL jest jak zamknięte na stosowny zamek drzwi do domu, natomiast nagłówki bezpieczeństwa jak inne miejsca w domu, przez które można się dostać, takie jak drzwi od garażu, okna, drzwi od strony tarasu itp. Jeżeli drzwi główne są zamknięte, a inne drzwi i okna otwarte, to nie zapewniamy właściwej ochrony naszego domu. Podobnie jest z witryną. Korzystając z powyższego artykułu, możesz osiągnąć indeks A+, o którym pisałem również w artykule Strona internetowa – jak ją założyć? Możesz też zamówić usługę Nagłówki bezpieczeństwa – konfiguracja.
W przypadku wątpliwości napisz do mnie.