Bezpieczeństwo iframe — clickjacking i X-Frame-Options
Zapobieganie atakom clickjacking za pomocą X-Frame-Options i CSP
Bezpieczeństwo iframe — clickjacking i X-Frame-Options to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.
Czym jest clickjacking
Clickjacking (fałszowanie interfejsu użytkownika, UI redressing) polega na osadzeniu docelowej witryny w przezroczystym iframe umieszczonym nad stroną przynętą. Użytkownik sądzi, że klika element strony przynęty, ale w rzeczywistości klika ukrytą, uwierzytelnioną stronę znajdującą się pod spodem — wykonując działania w docelowej witrynie bez swojej wiedzy.
Mechanizm ataku clickjacking
Atakujący ładuje victim.com w przezroczystym iframe umieszczonym nad przyciskiem „Kliknij, aby wygrać!”. Gdy użytkownik klika, w rzeczywistości klika przycisk „Usuń konto” w witrynie victim.com — jako uwierzytelniony użytkownik na podstawie pliku cookie sesji tej witryny. Phishing nie jest wymagany.
Nagłówek X-Frame-Options
X-Frame-Options: DENY uniemożliwia załadowanie strony w dowolnym iframe. X-Frame-Options: SAMEORIGIN zezwala na osadzanie strony wyłącznie przez strony z tego samego originu. Proszę ustawić ten nagłówek po stronie serwera na wszystkich uwierzytelnionych stronach, aby zapobiec clickjackingowi.
Content-Security-Policy frame-ancestors
Content-Security-Policy: frame-ancestors 'none' to nowoczesny i bardziej elastyczny zamiennik X-Frame-Options: DENY. frame-ancestors 'self' zastępuje SAMEORIGIN. frame-ancestors może również zezwalać na określone zaufane originy: frame-ancestors https://trusted.example.com.
Frame busting w JavaScript
Starsze mechanizmy frame busting wykorzystywały JavaScript do wydostawania się z ramek. Można je łatwo obejść za pomocą atrybutu sandbox (który blokuje skrypt frame busting). Zawsze proszę używać nagłówków po stronie serwera (X-Frame-Options lub CSP frame-ancestors) — frame busting w JavaScript nie jest niezawodny.
Kiedy zezwalać na osadzanie w ramkach
Uzasadnione przypadki użycia ramek to: osadzanie własnych treści we własnym originie (SAMEORIGIN) oraz zezwalanie konkretnemu partnerowi na osadzanie widgetu (frame-ancestors z określonym originem). Proszę zaprojektować politykę tak, aby zezwalała na te przypadki i odrzucała wszystkie pozostałe.
Podejście łączone
Proszę ustawić zarówno X-Frame-Options (dla starszych przeglądarek), jak i CSP frame-ancestors (dla nowoczesnych przeglądarek), aby uzyskać maksymalny zakres ochrony. Gdy oba nagłówki są obecne, w przeglądarkach obsługujących CSP pierwszeństwo ma frame-ancestors. Wysyłanie obu nagłówków zapewnia ochronę przed clickjackingiem we wszystkich klientach użytkownika.
Zagrożenia związane z iframe z tego samego originu
Nawet iframe z tego samego originu mogą stwarzać zagrożenia: przechowywane XSS na osadzonej stronie może uzyskać dostęp do strony nadrzędnej przez parent.document, jeśli iframe i strona nadrzędna mają ten sam origin. W przypadku iframe z tego samego originu, które nie potrzebują dostępu do strony nadrzędnej, proszę używać sandbox bez allow-same-origin, aby ograniczyć szkody wynikające z luk w osadzanej treści.
Testowanie ochrony
Aby zweryfikować ochronę przed clickjackingiem, proszę użyć karty sieciowej w narzędziach przeglądarki i sprawdzić, czy nagłówki odpowiedzi zawierają X-Frame-Options lub CSP frame-ancestors. Narzędzia takie jak securityheaders.com analizują nagłówki. Proszę utworzyć testową stronę HTML z iframe wskazującym na Państwa witrynę i sprawdzić, czy nie uda się go załadować.
Treści osadzane zewnętrznie
Podczas osadzania treści zewnętrznych (YouTube, Google Maps) to Państwo są witryną osadzającą — proszę upewnić się, że osadzana usługa zezwala na osadzanie we własnej polityce X-Frame-Options. Nie można osadzić witryny, która blokuje osadzanie — jest to zamierzone działanie chroniące użytkowników osadzanej usługi.
CSP frame-ancestors w znacznikach meta
W przeciwieństwie do większości dyrektyw CSP, frame-ancestors nie można ustawić za pomocą znacznika meta z atrybutem HTTP-equiv — dyrektywa musi zostać dostarczona jako nagłówek odpowiedzi HTTP. Dzięki temu atakujący nie mogą usunąć ochrony przez zmodyfikowanie osadzanego kodu HTML, zanim przeglądarka odczyta znaczniki meta.
Sprawdzenie wiedzy
Dlaczego kod frame busting w JavaScript jest niezawodną ochroną przed clickjackingiem?
Podsumowanie
Clickjacking osadza uwierzytelnione strony w przezroczystych iframe, aby przejmować kliknięcia. Obrona: nagłówki po stronie serwera X-Frame-Options: DENY lub CSP frame-ancestors: none. Proszę ustawić oba, aby zapewnić ochronę w różnych przeglądarkach. Frame busting w JavaScript jest niezawodny — zawsze proszę używać nagłówków HTTP. frame-ancestors oferuje szczegółowe zezwalanie na listę zaufanych originów, czego X-Frame-Options nie potrafi.
Często zadawane pytania
Czy lekcja „Bezpieczeństwo iframe — clickjacking i X-Frame-Options” jest bezpłatna?
Tak — pełny tekst „Bezpieczeństwo iframe — clickjacking i X-Frame-Options” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Bezpieczeństwo iframe — clickjacking i X-Frame-Options”?
Zapobieganie atakom clickjacking za pomocą X-Frame-Options i CSP Ćwiczysz HTML Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć HTML Academy?
Nie wymagamy żadnego doświadczenia. HTML Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Bezpieczeństwo iframe — clickjacking i X-Frame-Options”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji HTML Academy?
Tak. Każda lekcja HTML Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Element iframe — src i sandbox
- Bezpieczeństwo iframe — clickjacking i X-Frame-Options
- Elementy embed i object
- Leniwe ładowanie iframe