X-Frame-Options ir apsauga nuo „clickjacking“
„Clickjacking“ apgaule priverčia jūsų vartotojus spustelėti tai, ko jie nemato. Apsauga paprasta: nurodykite naršyklėms, kam leidžiama įterpti jūsų puslapius į rėmelį. Šį darbą atlieka dvi antraštės — senesnė X-Frame-Options ir modernioji CSP frame-ancestors direktyva.
Trumpai
Nustatykite X-Frame-Options: SAMEORIGIN, kad apimtų daug naršyklių, ir pridėkite frame-ancestors į savo Content Security Policy dėl modernesnės, lankstesnės tos pačios apsaugos versijos. Jei nustatysite abi, dabartinėse naršyklėse laimi frame-ancestors. Ką jūsų svetainė siunčia, patvirtinsite mūsų antraščių tikrinimu.
Kaip veikia „clickjacking“
„Clickjacking“ atakoje užpuolikas įkelia jūsų tikrąją svetainę į permatomą arba užmaskuotą <iframe> savo valdomame puslapyje. Tada ant viršaus uždeda savo turinį ir taip pozicionuoja nematomą jūsų puslapio kopiją, kad kai auka spusteli tai, kas atrodo kaip nekaltas mygtukas, ji iš tikrųjų spusteli valdiklį jūsų svetainėje — patvirtina mokėjimą, keičia nustatymą arba patvirtina leidimą. Kadangi spustelėjimas patenka į jūsų tikrąjį puslapį, kol vartotojas yra prisijungęs, veiksmas yra realus. Vartotojas jūsų svetainės išvis nemato.
Sprendimas yra neleisti jūsų puslapių įrėminti svetainėms, kuriomis nepasitikite. Naršyklė gali paklusti šiam nurodymui tik tada, jei jį išsiųsite, todėl politika „pagal nutylėjimą neįrėminama“ yra bazinė saugumo antraštė.
Taikinys yra bet kur, kur prisijungusio vartotojo spustelėjimas turi realų poveikį: bankininkystės ir mokėjimų patvirtinimai, administratoriaus jungikliai, pirkimai vienu spustelėjimu, sekimo ar prenumeravimo mygtukai ir bet koks raginimas „suteikti prieigą“. Užpuolikui nereikia įveikti jūsų autentifikacijos — jis pasiskolina esamą aukos seansą ir tiesiog nukreipia spustelėjimą. Būtent todėl apsaugą nuo įrėminimo verta taikyti visai svetainei, o ne tik prisijungimo puslapyje.
X-Frame-Options
Ši antraštė priima vieną iš dviejų naudingų reikšmių:
X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
| Reikšmė | Poveikis |
|---|---|
DENY | Nė viena svetainė negali įrėminti jūsų puslapių, net ir jūsų pačių. |
SAMEORIGIN | Jūsų puslapius gali įrėminti tik jūsų pačių kilmės puslapiai. Saugus numatytasis nustatymas daugumai svetainių. |
Anksčiau egzistavo senesnė reikšmė ALLOW-FROM vienai leidžiamai kilmei įvardyti, tačiau ji buvo nenuosekliai palaikoma ir dabar yra pasenusi. Jei jums reikia leisti konkrečius išorinius įterpėjus, verčiau naudokite CSP.
Modernus pakaitalas: frame-ancestors
Content Security Policy frame-ancestors direktyva daro viską, ką ir X-Frame-Options, ir dar daugiau. Ji priima leidžiamų kilmių sąrašą, o ne vieną:
Content-Security-Policy: frame-ancestors 'none'
Content-Security-Policy: frame-ancestors 'self'
Content-Security-Policy: frame-ancestors 'self' https://partner.example.com
Čia 'none' atitinka DENY, 'self' atitinka SAMEORIGIN, o galite pridėti ir aiškių patikimų kilmių — naudinga, kai tikras partneris arba jūsų pačių pagalbos tarnybos įrankis teisėtai įterpia jūsų puslapius.
frame-ancestors, ji visiškai ignoruoja X-Frame-Options. Įsitikinkite, kad abi sutampa. Nustačius X-Frame-Options: DENY, bet frame-ancestors 'self', modernios naršyklės leis to paties šaltinio įrėminimą, o to galbūt neketinote.Kaip tai išbandyti
Patvirtinti, kad apsauga veikia, paprasta. Kitoje kilmėje sukurkite laikiną HTML puslapį, kuris bandytų įrėminti vieną jūsų puslapių:
<iframe src="https://example.com/account"></iframe>
Atidarykite jį ir stebėkite naršyklės konsolę. Su nustatyta antrašte rėmelis lieka tuščias, o naršyklė užregistruoja atsisakymą rodyti puslapį dėl įrėminimo taisyklės. Taip pat galite tiesiogiai peržiūrėti atsako antraštes naršyklės tinklo skydelyje arba naudoti automatinį antraščių tikrinimą, kad pamatytumėte reikšmę be rankinio testavimo.
Kurią naudoti?
Siųskite abi. Palikite X-Frame-Options: SAMEORIGIN kaip atsarginį variantą senesniems klientams ir pridėkite atitinkamą frame-ancestors į savo CSP, kad modernios naršyklės gautų tikslesnę taisyklę. Kartu jos apima iš esmės kiekvieną naršyklę, kurią naudoja jūsų lankytojai.
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self'
Apache serveryje pridėkite jas su Header always set; Nginx — su add_header ... always;. Jei jūsų svetainė yra grynas API arba niekada neturėtų būti įterpiama, rinkitės DENY ir 'none'. Abi priklauso platesniam saugumo antraščių kontroliniam sąrašui — įdiegę atlikite patikrą, kad įsitikintumėte, jog svetimieji nebegali įrėminti jūsų puslapių.
Dažniausiai užduodami klausimai
Ar tai sugadins teisėtus mano svetainės įterpimus?
Gali. Jei tikras partneris įterpia jūsų puslapius, išvardykite jo kilmę frame-ancestors, o ne pašalinkite apsaugą. Niekada nesugrįžkite prie visų kilmių leidimo.
Ar man vis tiek reikia X-Frame-Options, jei naudoju CSP?
Verta ją pasilikti kaip atsarginį variantą tam nedideliam senesnių klientų skaičiui, kurie nepalaiko frame-ancestors. Modernios naršyklės naudos CSP direktyvą ir ignoruos senesnę antraštę.
Ar tai apsaugo nuo kiekvieno „clickjacking“ varianto?
Įrėminimą stabdančios antraštės sustabdo pagrindinę iframe techniką, o tai apima didžiąją dalį atakų. Papildomam gynybos gyliui derinkite jas su protingais patvirtinimo žingsniais didelės rizikos veiksmuose.
Susiję vadovai
HTTP saugumo antraštės: pilnas kontrolinis sąrašas
Visos svarbios HTTP saugumo antraštės, nuo ko jos apsaugo ir paruošta pradinė konfigūracija.
Skaityti →HTTP saugumo antraštėsHSTS paaiškinimas: Strict-Transport-Security teisingai
Kaip HSTS priverčia naudoti HTTPS, ką reiškia „preload“ sąrašas ir kaip jį įdiegti neužsirakinant.
Skaityti →HTTP saugumo antraštėsTurinio saugumo politika (CSP) pradedantiesiems
Kaip CSP stabdo kenkėjiškus scenarijus (XSS), kodėl ją sunku suderinti ir saugus būdas įdiegti pirmąją politiką.
Skaityti →Patikrinkite savo svetainę pagal šį vadovą
Atlikite nemokamą ScanOpsPro patikrą ir pažiūrėkite, kaip jūsų svetainė tvarkosi su pagrindais.
Atlikti nemokamą patikrą