Defaults.Exposed

Defaults.ExposedNaprawy › Ochrona przed clickjackingiem (X-Frame-Options)

Jak naprawić Ochrona przed clickjackingiem (X-Frame-Options)

Jednolinijkowe polecenie, które mówi przeglądarkom, by nie pozwalały innym witrynom potajemnie ładować Twojej strony w swoim wnętrzu. Bez niego oszust może ukryć Twoje prawdziwe, zalogowane strony za fałszywą stroną i nakłonić klientów do kliknięcia rzeczy, których nigdy nie zamierzali — zatwierdzenia płatności, zmiany hasła, przyznania dostępu.

W skrócie dla Twojej firmy: Oszust może niewidocznie opakować Twoją działającą witrynę w fałszywą i ukraść pieniądze lub dostęp do kont od Twoich zalogowanych klientów — a klientowi wygląda to tak, jakby zrobiła to Twoja strona. Poprawka jest darmowa i zajmuje programiście około 15 minut; pozostawienie tej luki to znana dziura, którą zarówno przestępcy, jak i ostrożni kupujący wychwycą w kilka sekund.

Ile może Cię to kosztować

Dlaczego to ma znaczenie. To darmowe, jednolinijkowe ustawienie, które dodaje się w kilka minut, a zamyka całą klasę podstępów wymierzonych w Twoich zalogowanych klientów. W naszej punktacji jest to istotny dla wyniku test bezpieczeństwa web o wysokiej wadze, ponieważ brak nagłówka pozostawia znaną, łatwą do wykrycia dziurę, którą przestępcy automatyzują, a kupujący jej szukają.

Co to jest, po ludzku

Gdy ktoś odwiedza Twoją witrynę, jego przeglądarce można też kazać załadować Twoją stronę wewnątrz innej witryny — jak małe okienko osadzone w większej stronie. Brzmi niewinnie i czasem takie jest. Ale to mechanizm stojący za atakiem zwanym clickjackingiem.

Oto na czym polega podstęp. Oszust buduje własną stronę i po cichu ładuje w niej Twoją prawdziwą witrynę — niewidocznie, całkowicie przezroczyście. Następnie na wierzchu kładzie swoją treść: efektowny przycisk, „Odtwórz wideo”, „Odbierz nagrodę”. Twój klient widzi stronę atakującego i klika coś, co wygląda na nieszkodliwy przycisk. Ale ponieważ Twoja prawdziwa strona leży niewidocznie pod kursorem, kliknięcie trafia faktycznie na Twoją stronę — potwierdza płatność, zmienia hasło, zatwierdza dostęp, akceptuje uprawnienie. Klient myśli, że kliknął jedno; w rzeczywistości kliknął coś innego, na witrynie, której ufa.

Ochrona przed clickjackingiem to krótkie, niewidoczne polecenie, które Twoja witryna wysyła do przeglądarki każdego odwiedzającego, mówiące w praktyce:

„Nie pozwalaj innym witrynom ładować mnie wewnątrz siebie. Jeśli ktoś spróbuje, odmów.”

Nowoczesne przeglądarki stosują się do tego automatycznie. Z włączoną ochroną podstęp po prostu nie działa — osadzona kopia Twojej witryny odmawia załadowania. Bez niej Twoja witryna jest łatwym łupem do wykorzystania jako ukryta warstwa w oszustwie, a klient, który da się złapać, skojarzy całą sprawę z Twoją marką, nie z atakującym.

Co to może Cię kosztować

To realistyczne, codzienne scenariusze. Nigdy nie podajemy nazwy prawdziwej firmy; to ilustracje, jak ta luka bywa wykorzystywana.

  1. Niewidoczne „potwierdź”. Klient jest zalogowany do Twojego panelu konta w jednej karcie. Trafia na stronę (z reklamy, e-maila, wyniku wyszukiwania), która obiecuje coś kuszącego i pokazuje duży przycisk „Kontynuuj”. Ukryta pod tym przyciskiem jest Twoja prawdziwa kontrolka „Potwierdź przelew” lub „Zmień e-mail”, załadowana z jego własnej zalogowanej sesji. Klika „Kontynuuj” — i nieświadomie autoryzuje zmianę na swoim realnym koncie u Ciebie. Dla niego i dla Twojego działu obsługi wygląda to tak, jakby on zrobił to na Twojej witrynie.

  2. Przejęcie ustawień. Atakujący osadza Twoją stronę ustawień konta i nakłada na nią niewinną grę lub ankietę. Kilka kliknięć we właściwych miejscach po cichu zmienia ustawienie — dodaje e-mail atakującego jako adres do odzyskiwania, przyznaje uprawnienie aplikacji albo wyłącza alert bezpieczeństwa. Konto jest teraz po cichu skompromitowane, a w danej chwili nic nie wyglądało źle.

  3. Transakcja, która utknęła. Większy klient przesyła przed podpisaniem swoją standardową ankietę bezpieczeństwa. Jedna pozycja pyta, czy Twoja witryna ustawia ochronę przed osadzaniem (X-Frame-Options / CSP frame-ancestors). Twój kontakt IT musi odpowiedzieć „nie”, a dział zakupów wstrzymuje proces, podczas gdy Ty w pośpiechu naprawiasz darmowe, 15-minutowe ustawienie, które teraz wygląda na czerwoną flagę na oczach kupującego.

  4. Kampania z marką jako przynętą. Ponieważ Twoje prawdziwe, zaufane strony da się osadzać, atakujący wykorzystuje Twoje logowanie lub kasę jako przekonującą warstwę w szerszej kampanii phishingowej. Klienci, którzy dadzą się złapać, nie obwiniają cienistego atakującego — zapamiętają to jako moment, gdy „Twoja strona” pozwoliła ich oszukać.

  5. Flaga w audycie. Skan ubezpieczyciela albo audytor oceniający Twój stan bezpieczeństwa wymienia brak ochrony przed clickjackingiem wśród ustaleń. To podręcznikowa pozycja podstawowej higieny; jej wytknięcie sygnalizuje, że proste, darmowe zabezpieczenia nie były na miejscu — co rzutuje na ocenę reszty Twojego bezpieczeństwa.

Wspólny mianownik: szkoda spada na prawdziwego, zalogowanego klienta robiącego coś, czego nie zamierzał — i nosi Twoje imię, nie atakującego.

Czym to właściwie jest

Gdy przeglądarka prosi Twoją witrynę o stronę, serwer odsyła stronę plus pewne niewidoczne „nagłówki” — dodatkowe instrukcje, które przeglądarka czyta, a których odwiedzający nigdy nie widzi. Ochrona przed clickjackingiem jest dostarczana właśnie przez te nagłówki. Są dwa, a nasz test zalicza, jeśli obecny jest którykolwiek:

1. Starszy nagłówek — X-Frame-Options:

X-Frame-Options: SAMEORIGIN

To wieloletni, szeroko obsługiwany mechanizm. Przyjmuje jedną z dwóch praktycznych wartości:

2. Nowoczesny nagłówek — Content-Security-Policy frame-ancestors:

Content-Security-Policy: frame-ancestors 'self';

To nowszy, bardziej elastyczny mechanizm, do którego kierują obecne standardy. Robi to samo, ale pozwala precyzyjnie określić, kto może Cię osadzać:

Jak wygląda dobry stan

Najmocniejsza konfiguracja używa obu: frame-ancestors dla nowoczesnych przeglądarek (i dla precyzji nazwania dopuszczonych osadzających) oraz X-Frame-Options: SAMEORIGIN jako rezerwa dla starszych klientów. Naszemu testowi wystarczy którykolwiek z osobna — ale skoro oba są darmowe i zajmują te same kilka minut, nie ma powodu nie ustawić obu.

Jeden istotny szczegół, który powinien znać Twój programista: nagłówek Content-Security-Policy-Report-Only niczego nie egzekwuje — jedynie raportuje. Jeśli ochrona przed clickjackingiem ma faktycznie zadziałać, musi pochodzić z nagłówka egzekwującego (zwykłego Content-Security-Policy z frame-ancestors lub X-Frame-Options), nie z trybu tylko do raportowania.

Jak to naprawić (darmowo, ~15 minut)

Przekaż tę sekcję osobie zarządzającej Twoją witryną — Twojemu informatykowi, programiście WWW lub wsparciu hostingu. Poprawka jest darmowa. To jeden lub dwa nagłówki odpowiedzi albo reguła w CDN. Nie ma niczego do kupienia.

Test zalicza, gdy obecny jest albo nagłówek X-Frame-Options (ustawiony na DENY lub SAMEORIGIN), albo dyrektywa CSP frame-ancestors. Zalecana konfiguracja pas i szelki dodaje oba.

Krok 1 — Zdecyduj, jak restrykcyjnie

Krok 2 — Dodaj nagłówki (wybierz swoją platformę)

Nginx — wewnątrz bloku server:

add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self';" always;

Apache — upewnij się, że mod_headers jest włączony, a następnie w wirtualnym hoście:

Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self';"

Microsoft IIS — w web.config wewnątrz <customHeaders>:

<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="Content-Security-Policy" value="frame-ancestors 'self';" />

Cloudflare (lub podobny CDN): przejdź do Rules → Transform Rules → Modify Response Header i dodaj dwie reguły, które ustawiają X-Frame-Options na SAMEORIGIN oraz Content-Security-Policy na frame-ancestors 'self'; dla wszystkich odpowiedzi. To najłatwiejsza droga, jeśli nie masz bezpośredniego dostępu do serwera.

Już wysyłasz Content-Security-Policy z innych powodów? Nie twórz drugiego nagłówka CSP — dodaj frame-ancestors do swojej istniejącej polityki. Dwa nagłówki CSP mogą się kłócić.

Kreatory witryn (Squarespace, Wix, Shopify i podobne): te platformy często ustawiają ochronę przed osadzaniem za Ciebie, więc możesz już zaliczać bez żadnych działań. Jeśli nasz test to oznaczy, mechanizm jest zwykle w ustawieniach bezpieczeństwa platformy albo dodajesz go w CDN stojącym przed witryną. (Uwaga: Google Workspace i Microsoft 365 obsługują Twój e-mail, nie witrynę — ten nagłówek ustawia się tam, gdzie faktycznie działa Twoja publiczna strona, a nie w panelu Workspace/365.)

Krok 3 — Przeładuj i zweryfikuj

Przeładuj serwer WWW lub wdroż regułę CDN, następnie wczytaj swoją działającą witrynę i sprawdź nagłówki odpowiedzi — narzędzia deweloperskie przeglądarki → zakładka Sieć → kliknij żądanie strony → Nagłówki odpowiedzi, albo dowolne darmowe narzędzie do sprawdzania nagłówków. Potwierdź, że nagłówek(i) pojawiają się na rzeczywistych odpowiedziach stron, nie tylko na stronie głównej. Następnie uruchom test ponownie.

Częste błędy

Najczęstsze pytania

Nie znam się na technice — czy mogę zająć się tym sam?

Nie musisz wykonywać części technicznej. To pojedyncze ustawienie dodane na serwerze Twojej witryny lub w CDN, a każdy programista WWW albo dostawca IT doda je w kilka minut. Przekaż im sekcję Jak to naprawić poniżej — mówi dokładnie, co dodać. Poprawka jest darmowa; pobieramy opłatę tylko, jeśli chcesz, byśmy dalej monitorowali, czy ustawienie pozostaje na miejscu.

Czy to nie zablokuje mojej własnej witryny lub legalnych partnerów przed wyświetlaniem moich stron?

Tylko jeśli ustawisz to zbyt restrykcyjnie. Typowe ustawienie (SAMEORIGIN lub frame-ancestors self) nadal pozwala Twojej witrynie normalnie osadzać własne strony — blokuje jedynie strony zewnętrzne. Jeśli prawdziwy partner musi osadzić jedną konkretną Twoją stronę, programista może dopuścić to jedno źródło, blokując wszystkich pozostałych.

Jesteśmy małą firmą — czy ktokolwiek naprawdę zechce nas zaatakować?

Te ataki prowadzą hurtowo zautomatyzowane narzędzia, nie wybierane ręcznie cele. Mniejsze witryny często padają ofiarą właśnie dlatego, że to one nie mają podstawowych zabezpieczeń, jak to. Atakujący nie musi wiedzieć, kim jesteś — wystarczy mu, że Twoją stronę da się osadzić. Zamknięcie tej luki nic Cię nie kosztuje.

Jak właściwie wygląda dobry stan?

Albo nagłówek X-Frame-Options ustawiony na SAMEORIGIN (lub DENY), albo Content-Security-Policy z dyrektywą frame-ancestors — najlepiej oba. Nasz test zalicza, jeśli obecny jest którykolwiek. Nowoczesnym, bardziej elastycznym mechanizmem jest frame-ancestors; X-Frame-Options to starszy nagłówek, który nadal obsługuje część starszych przeglądarek, więc konfiguracja pas i szelki używa obu.

Czy to nie to samo co kłódka SSL albo HTTPS?

Nie — chronią przed zupełnie różnymi rzeczami. HTTPS szyfruje połączenie, by nikt nie mógł go odczytać w trakcie przesyłu. Ochrona przed clickjackingiem w ogóle uniemożliwia ładowanie Twoich stron we wnętrzu cudzej witryny. Możesz mieć idealną kłódkę i wciąż być całkowicie podatny na clickjacking. To osobne testy i potrzebujesz obu.

Jeśli tego nie naprawimy, czy obniży to naszą ocenę?

Tak. To punktowany test bezpieczeństwa web, nie informacyjny — brak nagłówka kosztuje punkty i ma wysoką wagę, ponieważ wprost naraża Twoich zalogowanych klientów na oszustwo. To też jeden z najtańszych do odzyskania punktów: pojedynczy darmowy nagłówek, około 15 minut pracy programisty.