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
DENYNė viena svetainė negali įrėminti jūsų puslapių, net ir jūsų pačių.
SAMEORIGINJū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 pakeičia X-Frame-Options. Kai naršyklė supranta CSP 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

Patikrinkite savo svetainę pagal šį vadovą

Atlikite nemokamą ScanOpsPro patikrą ir pažiūrėkite, kaip jūsų svetainė tvarkosi su pagrindais.

Atlikti nemokamą patikrą