ARK. B18Parametr monitoringuBezpieczeństwo · lista 50 parametrów

X-Frame-Options

ważność średniamierzonysposób security_headers

Nagłówek chroniący przed clickjackingiem. Brak to ryzyko phishingu przez nakładkę.

ARK. 1

WIKI

artykuł z 16.09.2026 · źródeł 9

Nagłówek X-Frame-Options to parametr monitoringu stron internetowych, który sprawdza, czy odpowiedź serwera zawiera nagłówek X-Frame-Options. Pomiar kończy się jednym z trzech wyników: nagłówek obecny, brak nagłówka albo nie udało się pobrać odpowiedzi. Nagłówek informuje przeglądarkę, czy może wyświetlić dokument w elemencie <frame>, <iframe>, <embed> lub <object>, a witryny używają go, żeby ich treść nie była osadzana na innych stronach [4].

Jak działa

Nagłówek jest obroną przed clickjackingiem, nazywanym też atakiem UI redress. Atakujący używa wielu przezroczystych lub nieprzezroczystych warstw, żeby użytkownik kliknął przycisk albo odnośnik na innej stronie niż ta, z którą zamierzał wejść w interakcję [7]. Typowo przygotowuje stronę-przynętę z zachęcającym przyciskiem i ramką <iframe> z witryną docelową; ramka jest niewidoczna, np. przez opacity: 0, a przynęta leży dokładnie pod ukrytym przyciskiem [5]. Jeśli użytkownik jest zalogowany w witrynie docelowej, żądanie wywołane kliknięciem niesie jego prawdziwe dane uwierzytelniające i kończy się powodzeniem [5]. RFC 7034 opisuje to jako atak jednocześnie na użytkownika i na serwer osadzonej strony [1].

RYS. 1.1Osadzenie strony bez nagłówka i z nagłówkiem

Nagłówek przenosi decyzję do przeglądarki. Wartość DENY zabrania wyświetlania treści w jakiejkolwiek ramce, a SAMEORIGIN w ramce strony z innego źródła (ang. origin) niż sama treść [1]. Według standardu HTML przeglądarka przy SAMEORIGIN sprawdza kolejno każdy dokument nadrzędny i blokuje osadzenie, gdy którykolwiek z nich pochodzi z innego źródła [2]. Jeśli nagłówka nie ma i nie działa inne ograniczenie, np. dyrektywa CSP frame-ancestors, przeglądarki pozwalają innym witrynom osadzać dokument [4]. Nagłówek działa wyłącznie jako nagłówek odpowiedzi HTTP; ten sam zapis w znaczniku <meta http-equiv> jest ignorowany [1] [4].

RYS. 1.2Od nakładki do nieświadomego kliknięcia

Standardy i specyfikacje

  • RFC 7034 (październik 2013, dokument informacyjny) opisuje nagłówek, który producenci przeglądarek wprowadzili w latach 2009–2010 jako niestandardowy [1]. Definiuje trzy wzajemnie wykluczające się wartości: DENY, SAMEORIGIN i ALLOW-FROM [1]. Zaznacza, że nie wszystkie przeglądarki obsługują ALLOW-FROM, a SAMEORIGIN bywa porównywane tylko z kontekstem najwyższego poziomu, i zapowiada zastąpienie nagłówka dyrektywą w Content Security Policy [1].
  • Standard HTML (WHATWG) zastępuje definicję z RFC 7034 własnym modelem przetwarzania i dopuszcza tylko DENY oraz SAMEORIGIN; wariantu ALLOW-FROM nie należy implementować [2]. Pojedyncza nieprawidłowa wartość, w tym ALLOW-FROM i ALLOWALL, jest traktowana tak, jakby nagłówka nie było [2]. Wynik jest ten sam, gdy wartości przyjdą po przecinku w jednym nagłówku albo w kilku osobnych [2].
  • CSP Level 3 (W3C) stanowi, że jeśli zasób ma egzekwowaną politykę z dyrektywą frame-ancestors, nagłówek X-Frame-Options musi zostać zignorowany [3]. MDN nazywa frame-ancestors następcą nagłówka, który jest mniej szczegółowy: pozwala tylko całkowicie zablokować osadzanie albo dopuścić je dla dokumentów z tego samego źródła [5]. Wysłanie obu mechanizmów blokuje osadzanie także w przeglądarkach bez obsługi frame-ancestors, choć obsługa tej dyrektywy jest dziś bardzo dobra [5].
  • OWASP zaleca dyrektywę frame-ancestors, jeśli to możliwe, i wartość X-Frame-Options: DENY [9]. Zastrzega, że nagłówek ma sens tylko w odpowiedzi, która zawiera coś do interakcji, np. odnośniki lub przyciski; w przekierowaniu albo w odpowiedzi API z danymi JSON nie daje żadnej ochrony [9].

Zagrożenia i skutki

Działania wykonane bez wiedzy użytkownika. OWASP podaje przykłady: stronę ustawień Adobe Flash wczytaną w ukrytej ramce, przez którą użytkownicy włączali dostęp do mikrofonu i kamery, robaka na Twitterze, który skłaniał użytkowników do podania dalej adresu złośliwej strony, oraz nieświadome polubienia stron i grup na Facebooku [7]. Odmiana z przechwytywaniem klawiszy sprawia, że użytkownik wpisuje hasło do niewidocznej ramki atakującego [7].

Skuteczność. Huang i współautorzy (USENIX Security 2012) przebadali 2064 uczestników w serwisie Amazon Mechanical Turk; ich warianty ataku miały skuteczność od 43 do 98 procent [8]. Autorzy wskazali, że clickjacking może prowadzić do przejęcia kamery, poczty i innych prywatnych danych [8].

Zawodne skrypty frame-busting. Zabezpieczenie w JavaScripcie, np. if (top!=self) top.location.href=self.location.href, można obejść podwójnym osadzeniem, obsługą onBeforeUnload albo atrybutem sandbox ramki [6]. RFC 7034 powołuje się na badanie, które wykazało słabości takich zabezpieczeń [1].

Zagnieżdżone ramki. RFC 7034 ostrzega, że implementacje porównujące źródło tylko z kontekstem najwyższego poziomu przepuszczają atak: strona ze źródła A osadza niezaufaną treść ze źródła B, a ta osadza inny zasób z A z SAMEORIGIN [1]. Model przetwarzania w standardzie HTML sprawdza każdy dokument nadrzędny [2].

Nagłówek nie wystarcza sam. RFC 7034 zaznacza, że nagłówek nie chroni przed wszystkimi wektorami i musi działać razem z innymi środkami [1]. Ciasteczka sesji z atrybutem SameSite o wartości Strict lub Lax nie są wysyłane do strony w ramce, więc udaremniają ataki wymagające zalogowania, ale nie chronią przed atakami, które sesji nie potrzebują [6]. MDN wymienia jako cel nagłówka także ochronę przed niektórymi wyciekami informacji między witrynami [4].

Pokrycie całej witryny. Politykę trzeba ustawić dla każdej strony, którą ma chronić, co komplikuje wdrożenie [6]. Proxy, które usunie nagłówek z odpowiedzi, odbiera witrynie tę ochronę [6].

Przykłady

Odpowiedź serweraSkutek przy osadzeniu przez inną witrynę
brak nagłówka i brak frame-ancestorsosadzenie dozwolone [4]
X-Frame-Options: DENYosadzenie zablokowane [2]
X-Frame-Options: SAMEORIGINzablokowane; dozwolone tylko, gdy wszystkie dokumenty nadrzędne mają to samo źródło [2]
X-Frame-Options: ALLOW-FROM https://example.com/traktowany jak brak nagłówka, osadzenie dozwolone z dowolnej witryny [2]
ALLOWALL albo inna nieprawidłowa wartośćosadzenie dozwolone [2]
SAMEORIGIN, DENY (także jako dwa nagłówki)osadzenie zablokowane [2]
INVALID, INVALIDosadzenie dozwolone [2]
wartość DENY w <meta http-equiv>bez skutku [1] [4]
egzekwowana CSP z frame-ancestors i dowolny X-Frame-Optionsdecyduje frame-ancestors, nagłówek ignorowany [2] [3]
TAB. 1.1Przypisy9
  1. [1] RFC 7034 — HTTP Header Field X-Frame-Options · IETF
  2. [2] HTML Standard — The X-Frame-Options header · WHATWG
  3. [3] Content Security Policy Level 3 · W3C
  4. [4] X-Frame-Options header · MDN Web Docs
  5. [5] Clickjacking · MDN Web Docs
  6. [6] Clickjacking Defense Cheat Sheet · OWASP
  7. [7] Clickjacking · OWASP Community
  8. [8] Lin-Shung Huang i in. — Clickjacking: Attacks and Defenses (USENIX Security 2012) · USENIX
  9. [9] HTTP Security Response Headers Cheat Sheet · OWASP
ARK. 2

STATS

wyniki z systemu · tylko liczby zbiorcze
TAB. 2.1Odczyty per strona

Ten parametr nie zapisuje odczytu per strona — przebieg zostawia tylko ustalenia, więc liczby sprawdzonych stron i wyników „ok” system nie ma. Pojawią się po wdrożeniu zapisu przebiegów per strona per parametr.

TAB. 2.3Ustalenia

Ten parametr nie otworzył jeszcze żadnego ustalenia w bazie LAB247. Pusto nie znaczy „czysto” — znaczy, że nic nie przekroczyło reguły.

TAB. 2.4Przebiegi z tym sposobem sprawdzeniaod 09.09.2026
Przebiegów
33sposób security_headers
W 30 dni
33przebiegów
Ostatni
19.09.2026start przebiegu
Stron w przebiegach
33 przebiegów bez liczby stron
ARK. 3

CARD

karta z kodu CREATO_PING, odczyt 16.09.2026
RYS. 3.1Droga parametru przez system: X-Frame-Options
TAB. 3.1Pomiarpliki: 4
Obszar i ważnośćBezpieczeństwo · średnia (B18)
Workflow i częstotliwośćcreato_ping_security_v2 · P3 działa na LAB247cron co 24 h, T1–T3; T4 raz po anomalii · Dokładny skan. dns_integrity porównuje NS, MX, SPF i DMARC z wzorcem z poprzedniego przebiegu.
Sonda i helpersposób security_headers · CREATO_PING/helpers/security_headers.py
Testy
  1. Tylko przebieg P3; domena bez rekordu A pominięta na wstępie; strony w przebiegu sprawdzane po kolei.
  2. HEAD https://domena (wyłącznie strona główna) z podążaniem za przekierowaniami — nagłówki czytane tylko z odpowiedzi końcowej; kod 405 = druga próba GET.
  3. Sprawdzana tylko obecność X-Frame-Options; wartość nie jest czytana, a Content-Security-Policy z frame-ancestors nie liczy się jako spełnienie.
  4. Jedno żądanie obsługuje sześć nagłówków bezpieczeństwa.
Typ wyniku0 albo 1 ustalenie missing_xframe — w produkcji odrzucane w przebiegu, zanim cokolwiek je zapisze
Jednostkabrak — wynik jakościowy (obecność nagłówka)
Próg i regułaTimeout 6,0 s, połączenie 2,0 s (stała w helperze). Reguła: brak nagłówka = missing_xframe; nagłówek z dowolną wartością = ok.
Gdzie leżą pokrętłaCREATO_PING/helpers/security_headers.py → _CHECKS (powaga normal), _TIMEOUTCREATO_PING/helpers/security_runner.py → _TASK_SEVERITIES (dalej idą tylko urgent i high)CREATO_PING/config/incident_policy.toml → [finding] missing_xframe
Retencja odczytówŻadna: filtr powagi istniał, zanim powstał helper, więc według kodu to ustalenie nigdy nie trafiło do ClickUp ani do bazy LAB247.
Znane rozbieżności
  1. Strona z egzekwowaną CSP frame-ancestors i bez X-Frame-Options dostaje ustalenie, choć przeglądarki i tak ignorują wtedy X-Frame-Options.
  2. Sprawdzana sama obecność: ALLOW-FROM, ALLOWALL albo wartość nieprawidłowa przechodzą jako ok, a przeglądarki traktują je jak brak nagłówka.
  3. Badana jest tylko strona główna; nagłówek ma znaczenie na stronach z elementami do kliknięcia (logowanie, formularze).
  4. Katalog nazywa skutek „phishingiem przez nakładkę” — to clickjacking; katalog ustaleń zaleca SAMEORIGIN, a OWASP DENY albo frame-ancestors.
  5. Dwie bramki, opisana jedna: samo gate=true w polityce nic nie zmieni, bo ustalenie odpada wcześniej na filtrze powagi — trzeba też podnieść powagę w helperze.
  6. Powaga niespójna: helper normalna, polityka i katalog ustaleń niska.
  7. Błąd sieci albo timeout zwraca pustą listę — nieodróżnialne od „nagłówek jest”; odpowiedź 403 z WAF-a albo 5xx oceniana jak zwykła strona.
kandydaci do pętli: kod a opis parametru albo specyfikacja
Karta przepisana zCREATO_PING/helpers/security_headers.py · CREATO_PING/helpers/security_runner.py · CREATO_PING/config/incident_policy.toml · CREATO_PING/workflows/_prod/creato_ping_security_v2.json · odczyt 16.09.2026
TAB. 3.2Co oznacza failtypów ustaleń: 1

Helper zgłasza powagę normalną, a filtr przebiegu przepuszcza tylko pilną i wysoką — ustalenie odpada, zanim zostanie odczytana polityka incydentów. Przebieg produkcyjny idzie z --no-stats, więc nie zostaje nawet licznik. Wpis w polityce (gate=false) nie jest osiągany. Status strony bez zmian.

UstaleniePowagaPewnośćSkutekSubtask / alarmCo zrobić
Brak X-Frame-Optionsmissing_xframeNiskieEwidentnebez wpływunie / nieDodaj X-Frame-Options: SAMEORIGIN.
ARK. 4

LOOP

bez pętli
RYS. 4.1Pętla parametru — sześć etapów
TAB. 4.1Trafność, 30 dnialarmy · prawdziwe · fałszywe · bez rozstrzygnięcia

Trafności jeszcze nie liczymy: zamknięcie subtaska nie niesie dziś werdyktu (prawdziwy / fałszywy / nie dało się sprawdzić). Cztery liczby pojawią się, gdy każde zamknięcie dostanie werdykt — to warunek startu pętli 1.

TAB. 4.2Pętle

Ten parametr nie przeszedł jeszcze żadnej pętli. Kolejność po pierwszych pięciu grupach ustali miara trafności.

Blog 24/7
20.09Zastrzeżony PESEL: zmiana raz na 30 minut, blokada przy wypłaciedobreprogramy.pl20.09Fałszywe SMS-y od GITD o mandacie za autostradę wyłudzają dane kartyinstalki.pl20.09Pakiet npm indexed-btree omija blokadę skryptów instalacyjnychbleepingcomputer.com19.09SolarWinds łata CVE-2026-28326 w Access Rights Manager, zdalny kod bez logowaniathehackernews.com19.09Orkes Conductor: luka CVE-2026-58138 atakowana w sieci, poprawka w wersji 3.30.2thehackernews.com19.09Trzy luki jądra Linux w katalogu CISA KEV, Red Hat potwierdza aktywne atakithehackernews.com18.09Publiczne exploity na cztery luki jądra Linux dają lokalnie uprawnienia rootthehackernews.com18.09Brevo: skradziony klucz API Cloudflare i skrypty ClickFix na stronach klientówbleepingcomputer.com18.09WaterPlum z Korei Północnej zainfekowała 30 000 urządzeń w 100 krajachtherecord.media18.09Jedna zgoda OAuth daje napastnikowi dostęp do poczty i plików mimo MFAdarkreading.com