Defaults.Exposed

Defaults.ExposedIspravci › Zaštita od clickjackinga (X-Frame-Options)

Kako popraviti Zaštita od clickjackinga (X-Frame-Options)

Jednolinirajska uputa koja preglednicima govori da ne dopuštaju drugim web stranicama da tajno učitaju vašu stranicu unutar svojih. Bez njega, prevarant može sakriti vaše stvarne, prijavljene stranice iza lažne i prevariti vaše klijente da kliknu stvari koje nikad nisu namjeravali — odobriti plaćanje, promijeniti lozinku, dodijeliti pristup.

Zaključak za vaše poslovanje: Prevarant može nevidljivo umotati vašu živu web stranicu unutar lažne i ukrasti novac ili pristup računu od vaših prijavljenih klijenata — i klijentu izgleda kao da je vaša stranica to napravila. Popravak je besplatan i programeru traje oko 15 minuta; ostavljanje isključenim je poznata praznina koju i kriminalci i oprezni kupci mogu uočiti za sekunde.

Što vas ovo može koštati

Zašto je to važno. Ovo je besplatna, jednolinirajska postavka koja traje minutama za dodati, i zatvara cijelu klasu trikova usmjerenih na vaše prijavljene klijente. U našem bodovanju to je vrijedi-prave-bodove provjera web sigurnosti ocijenjene visoke ozbiljnosti, jer nedostajuće zaglavlje ostavlja poznatu, lako-provjerivenu rupu koju kriminalci automatiziraju i kupci traže.

Što je ovo, jednostavnim riječima

Kad netko posjeti vašu web stranicu, njihovom pregleniku se može reći i da učita vašu stranicu unutar druge web stranice — poput malog prozora ugnjezđenog unutar veće stranice. To zvuči bezopasno, i ponekad jest. Ali to je mehanizam iza napada zvanog clickjacking.

Evo trika. Prevarant izgradi vlastitu stranicu i tiho učita vašu pravu web stranicu unutar nje — nevidljivo, potpuno transparentno. Zatim postavi vlastiti sadržaj na vrh: privlačan gumb, “Reproduciraj video”, “Preuzmi nagradu”. Vaš klijent vidi napadačevu stranicu i klikne na ono što izgleda kao bezopasni gumb. Ali jer vaša prava stranica sjedi nevidljivo ispod njihovog kursora, klik zapravo pada na vašu stranicu — potvrđujući plaćanje, mijenjajući lozinku, odobravajući pristup, prihvaćajući dozvolu. Klijent misli da je kliknuo jednu stvar; zapravo su kliknuli drugu, na stranici kojoj vjeruju.

Zaštita od clickjackinga je kratka, nevidljiva uputa koju vaša web stranica šalje pregleniku svakog posjetitelja koja kaže, u suštini:

“Ne dopusti drugim web stranicama da me učitaju unutar sebe. Ako netko pokuša, odbij.”

Moderni preglednici to automatski poštuju. S tim uključenim, trik jednostavno ne funkcionira — ugniježdena kopija vaše stranice odbija se učitati. Bez toga, vaša stranica je dostupna za korištenje kao skriveni sloj u prijevari, a klijent koji bude uhvaćen cijelu stvar asocirat će s vašim brendom, ne napadačevim.

Što vas ovo može koštati

Ovo su realni, svakodnevni scenariji. Nikad ne imenujemo stvarno poduzeće; ovo su ilustracije kako se praznina koristi.

  1. Nevidljivo “potvrdi”. Klijent je prijavljen u vaš korisnički portal na jednoj kartici. Dospije na stranicu (iz oglasa, e-pošte, rezultata pretraživanja) koja obećava nešto primamljivo i prikazuje veliki gumb “Nastavi”. Sakriven ispod tog gumba je vaš pravi “Potvrdi prijenos” ili “Promijeni e-poštu” kontrola, učitan iz njihove vlastite prijavljene sesije. Kliknu “Nastavi” — i nesvjesno autoriziraju pravu promjenu na svom stvarnom računu kod vas. Njima i vašem timu za podršku, izgleda kao da su oni to napravili na vašoj stranici.

  2. Otmica postavki. Napadač uokviri vašu stranicu s postavkama računa i postavi nevin igra ili anketu na vrh. Nekoliko klikova na pravim mjestima tiho preklopi postavku — dodajući napadačevu e-poštu kao adresu za oporavak, dajući dozvolu aplikaciji ili onemogućujući sigurnosno upozorenje. Račun je sada tiho kompromitiran, i ništa nije izgledalo pogrešno u to vrijeme.

  3. Posao koji stane. Veći klijent šalje standardni sigurnosni upitnik prije potpisa. Jedan redak pita je li vaša stranica postavila anti-uokvirivanje zaštitu (X-Frame-Options / CSP frame-ancestors). Vaš IT kontakt mora odgovoriti “ne,” i nabava pauzira dok žurite popraviti besplatnu, 15-minutnu postavku koja sada izgleda kao crvena zastava pred kupcem.

  4. Brend-kao-mamac kampanja. Jer vaše pravo, pouzdane stranice mogu biti ugniježdene, napadač koristi vašu prijavu ili naplatu kao uvjerljivi sloj u široj phishing kampanji. Klijenti koji budu uhvaćeni ne krivičuju sjenovitog napadača — pamte to kao put kada je “vaša stranica” dopustila da budu prevarani.

  5. Oznaka revizije. Skeniranje osiguravatelja ili revizor koji pregledava vaš sigurnosni stav navede nedostajuću zaštitu od clickjackinga između nalaza. To je udžbenički osnovni-higijenska stavka; imati je označenu signalizira da jednostavne, besplatne zaštite nisu bile na mjestu — što oboji kako se ostatak vaše sigurnosti prosuđuje.

Crta kroz sve: šteta pada na stvarnog, prijavljenog klijenta koji nešto radi što nije namjeravao — i nosi vaše ime, ne napadačevo.

Što je to zapravo

Kad preglednik zatraži stranicu od vaše web stranice, vaš server vraća stranicu plus nekoliko nevidljivih “zaglavlja” — dodatnih uputa koje preglednik čita, ali posjetitelju nikad ne vidi. Zaštita od clickjackinga isporučuje se kroz ova zaglavlja. Postoje dva, a naša provjera prolazi ako je ijedna prisutna:

1. Starije zaglavlje — X-Frame-Options:

X-Frame-Options: SAMEORIGIN

Ovo je dugogodišnja, široko podržana kontrola. Uzima jednu od dvije praktične vrijednosti:

2. Moderno zaglavlje — Content-Security-Policy frame-ancestors:

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

Ovo je novija, fleksibilnija kontrola na koju aktualni standardi upućuju. Radi isti posao, ali dopušta da budete precizni o tome tko vas smije ugniježditi:

Kako izgleda ‘dobro’

Najjači postav koristi oboje: frame-ancestors za moderne preglednikei (i za preciznost imenovanja dopuštenih ugniježdivača) i X-Frame-Options: SAMEORIGIN kao zamjenu za starije klijente. Naša provjera je zadovoljana ijednim samim — ali budući su oba besplatna i traju iste nekoliko minuta, nema razloga ne postaviti oba.

Jedan važan detalj koji vaš programer treba znati: Content-Security-Policy-Report-Only zaglavlje ne provodi ništa — samo izvještava. Ako želite da zaštita od clickjackinga stvarno stupi na snagu, mora doći iz zaglavalja provedbe (normalni Content-Security-Policy s frame-ancestors, ili X-Frame-Options), ne samo-za-izvještavanje.

Kako to popraviti (besplatno, ~15 minuta)

Proslijedite ovaj odjeljak onome tko vodi vašu web stranicu — vašoj IT osobi, web programeru ili podršci hostinga. Popravak je besplatan. To su jedna ili dvije zaglavlja odgovora, ili pravilo u vašem CDN-u. Nema ničega za kupiti.

Provjera prolazi kad je ili X-Frame-Options zaglavlje (postavljeno na DENY ili SAMEORIGIN) ili CSP frame-ancestors direktiva prisutna. Preporučeni postav s pojasnicama i naramenicama dodaje oboje.

Korak 1 — Odlučite koliko strogo biti

Korak 2 — Dodajte zaglavlja (odaberite svoju platformu)

Nginx — unutar vašeg server bloka:

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

Apache — provjerite da je mod_headers omogućen, zatim u vašem virtualnom hostu:

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

Microsoft IIS — u web.config unutar <customHeaders>:

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

Cloudflare (ili sličan CDN): idite na Rules → Transform Rules → Modify Response Header i dodajte dva pravila koja postavljaju X-Frame-Options na SAMEORIGIN i Content-Security-Policy na frame-ancestors 'self'; na svim odgovorima. Ovo je najlakši put ako nemate izravan pristup serveru.

Već šaljete Content-Security-Policy iz nekog drugog razloga? Ne stvarajte drugo CSP zaglavlje — dodajte frame-ancestors u postojeću politiku. Dva CSP zaglavlja mogu biti u sukobu.

Graditelji stranica (Squarespace, Wix, Shopify i slični): ove platforme često za vas postavljaju anti-uokvirivanje zaštitu, pa biste već mogli prolaziti provjeru bez ničeg. Ako naša provjera to označi, kontrola je obično u sigurnosnim postavkama platforme, ili je dodajete na CDN koji sjedi ispred stranice. (Napomena: Google Workspace i Microsoft 365 pokreću vašu e-poštu, ne vašu web stranicu — ovo zaglavlje se postavlja gdje god vaša javna stranica zapravo živi, ne u Workspace/365 adminu.)

Korak 3 — Ponovo učitajte i verificirajte

Ponovo učitajte web server ili primijenite CDN pravilo, zatim učitajte svoju živu stranicu i provjerite zaglavlja odgovora — preglednikovi alati za razvijatelje → kartica Network → kliknite zahtjev stranice → Response Headers, ili bilo koji besplatni alat za provjeru zaglavlja. Potvrdite da se zaglavlja pojavljuju na pravim odgovorima stranica, ne samo na početnoj stranici. Zatim ponovo pokrenite provjeru.

Česte greške

Česta pitanja

Nisam tehničar — mogu li ovo sam riješiti?

Ne trebate napraviti tehnički dio. To je jedna postavka dodana na server vaše web stranice ili vaš CDN, a svaki web programer ili IT pružatelj može je dodati za nekoliko minuta. Proslijedite im odjeljak 'Kako to popraviti' u nastavku — govori im točno što dodati. Popravak je besplatan; naplaćujemo samo ako biste željeli da nadgledamo da ostane na mjestu.

Hoće li ovo prekinuti moju vlastitu stranicu, ili legitimne partnere, od prikazivanja mojih stranica?

Samo ako je postavljeno prestrogo. Uobičajena postavka ('SAMEORIGIN', ili 'frame-ancestors self') još uvijek dopušta vašoj vlastitoj web stranici ugniježdivanje vlastitih stranica normalno — blokira samo vanjske stranice. Ako pravi partner genuinno treba ugniježditi jednu specifičnu stranicu vaše, vaš programer može dopustiti taj jedan jedini izvor, a opet blokirati sve ostale.

Mi smo malo poduzeće — bi li se itko zaista trudio ciljati na nas?

Ovi napadi se odvijaju u volumenu automatiziranim alatima, ne ručno odabranim. Manje stranice često se pogode upravo zato jer im nedostaju ovakve osnovne zaštite. Napadaču ne treba znati tko ste — samo treba da vaša stranica bude ugniezdiva. Zatvaranje praznine ne košta vas ništa.

Kako zapravo izgleda 'dobro'?

Ili zaglavlje X-Frame-Options postavljeno na SAMEORIGIN (ili DENY), ili Content-Security-Policy s frame-ancestors direktivom — idealno oboje. Naša provjera prolazi ako je ijedno prisutno. Moderniji, fleksibilniji kontrola je frame-ancestors; X-Frame-Options je starije zaglavlje koje još pokriva neke naslijeđene preglednikei, pa postav s oba koristi pojasnice i naramenice.

Nije li ovo isto što i SSL lokot ili HTTPS?

Ne — štite od potpuno različitih stvari. HTTPS šifrira vezu da je nitko ne može čitati u prijenosu. Zaštita od clickjackinga sprječava učitavanje vaših stranica unutar nečije druge stranice uopće. Možete imati savršen lokot i biti u potpunosti ranjivi na clickjacking. Zasebne su provjere i oboje trebate.

Ako ga ne popravimo, snizuje li to našu ocjenu?

Da. Ovo je bodovana provjera web sigurnosti, ne informativna — nedostajuće zaglavlje košta bodova i ocijenjeno je visoke ozbiljnosti, jer izravno izlaže vaše prijavljene klijente prijevari. To je i jedna od najjeftinijih točaka za povratiti: jedno besplatno zaglavlje, oko 15 minuta programerovog vremena.