Inhoud bemarking

Iframe Breaking: Hoe om ongemagtigde iframing van jou inhoud te stop

'n Besoeker aan my webwerf het my eenkeer in kennis gestel toe hy op een van my skakels geklik het Twitter; hy is na my webwerf gebring met 'n groot pop-up en 'n kwaadwillige kode waarskuwing. Dit is genoeg om iemand bang te maak, so ek het 'n paar toetse begin doen. Daar was niks fout met my webwerf nie - die probleem was die skakel.

Die skakel op 'n ander werf het 'n nutsbalk bo-aan geskep wat mense aangemoedig het om op 'n kwaadwillige skakel te klik terwyl hulle my werf in 'n iframe daaronder laai. Vir die meeste mense kan dit lyk of my webwerf kwaadwillige kode versprei. Ek sou nie sê ek hou van enige webwerf wat my webwerf binne 'n iframe laai nie, so ek het gedoen wat enige redelike geek sou doen ... Ek het 'n raambreker gelaai.

Iframing van jou werf is egter nie altyd kwaadwillig nie. Ons het onlangs 'n instrument gedeel, Snipperig, om 'n oproep tot aksie by te voeg (GTA) na enige webwerfskakel wat jy deel. Dit doen dit deur jou hele werf in 'n iframe in te sluit en div oor jou inhoud toe te pas met die oproep tot aksie.

Maar ek is redelik spesifiek oor my inhoud en die moeite wat ek gedoen het Martech Zone, so ek wil nie hê dat iemand my inhoud moet iframe nie, selfs nie met 'n skakel-deel-platform nie. Deur navorsing te doen, is daar 'n hele paar maniere om dit te hanteer.

Hoe om op te hou om u inhoud met JavaScript te iframe

Hierdie JavaScript-kode kyk of die huidige venster (self) is nie die boonste venster nie (top). As dit nie is nie, beteken dit dat die bladsy in 'n raam, iframe of soortgelyk is, en die skrip herlei die boonste venster na die URL van die huidige venster. Dit effektief uitbreek van die iframe.

<script type='text/javascript'>
if (top !== self) top.location.href = self.location.href;
</script>

Daar is verskeie nadele aan hierdie benadering:

  1. Vertrou op JavaScript: As die gebruiker JavaScript gedeaktiveer het, sal hierdie metode nie werk nie.
  2. Vertragings: Daar kan 'n effense vertraging wees voordat die JavaScript uitgevoer word, waartydens die geraamde weergawe van jou werf steeds sigbaar kan wees.
  3. Kruisoorsprongbeperkings: In sommige situasies kan die Selfde Oorsprong-beleid verhoed dat hierdie skrip werk soos bedoel. As die ouerdokument op 'n ander domein is, kan dit dalk nie toegang kry nie top.location.href.
  4. Potensiaal vir Frame-Busting-Busters: Daar is ook skrifte (genoem frame-busting-busters) wat kan verhoed dat raam-busting scripts werk.

Die beter benadering is om HTTP-reaksieopskrifte te gebruik.

X-raam-opsies en inhoud-sekuriteit-beleid

Beide X-Frame-Options en Content-Security-Policy (CSP) is HTTP-reaksieopskrifte wat gebruik word om die sekuriteit van 'n webwerf te verbeter. Hulle dien elkeen effens verskillende doeleindes en het verskillende vlakke van buigsaamheid.

X-Frame-Options is 'n ouer HTTP-kopskrif wat spesifiek ontwerp is om te beheer of jou werf ingebed kan word in 'n <frame>, <iframe>, <embed>, of <object> op 'n ander webwerf. Dit het drie moontlike riglyne:

  1. DENY – Die bladsy kan nie in 'n raam vertoon word nie, ongeag die webwerf wat dit probeer doen.
  2. SAMEORIGIN – Die bladsy kan slegs in 'n raam op dieselfde oorsprong as die bladsy self vertoon word.
  3. ALLOW-FROM uri – Die bladsy kan slegs in 'n raam op die gespesifiseerde oorsprong vertoon word.

Egter X-Frame-Options is beperk deurdat dit nie meer komplekse scenario's kan hanteer nie, soos om raamwerk van verskeie verskillende oorspronge toe te laat of jokertekens vir subdomeine te gebruik. Nie alle blaaiers ondersteun die ALLOW-FROM richtlijn.

Content-Security-Policy, aan die ander kant, is 'n baie meer buigsame en kragtige HTTP-kopskrif. Terwyl dit alles kan doen X-Frame-Options kan doen en nog baie meer, is die primêre doel daarvan om 'n wye reeks kode-inspuitingsaanvalle te voorkom, insluitend kruis-werf scripting (XSS) en clickjacking. Dit werk deur 'n witlys van betroubare bronne van inhoud (skrifte, style, beelde, ens.) te spesifiseer.

Vir die beheer van rame gebruik CSP die frame-ancestors richtlijn. Jy kan veelvuldige bronne spesifiseer, insluitend veelvuldige domeine en wildkaart subdomeine. Hier is 'n voorbeeld:

cssCopy codeContent-Security-Policy: frame-ancestors 'self' yourdomain.com *.domain2.com;

Dit sal toelaat dat die bladsy op sy eie werf geraam word ('self'), aan yourdomain.com, en op enige subdomein van domain2.com.

CSP word aanbeveel as 'n plaasvervanger vir X-Frame-Options, aangesien dit alles kan hanteer X-Frame-Options kan doen, en nog baie meer. Terwyl die meeste moderne blaaiers CSP ondersteun, is daar dalk nog 'n paar ou of minder algemene blaaiers wat dit nie ten volle ondersteun nie.

Hoe om op te hou om u inhoud met HTML te iframe

Daar is nou 'n inhoud-sekuriteit-beleid-metamerker wat ontplooi kan word wat die vermoë om jou inhoud te iframe deaktiveer:

<meta http-equiv="Content-Security-Policy" content="frame-ancestors 'self' yourdomain.com">

Die doeltreffendheid van die HTML-metatag is beperk omdat nie alle blaaiers die Content-Security-Policy wanneer dit met 'n metatag gestel is.

Hoe om op te hou om u inhoud met HTTP-opskrifte te iframe

Dit is beter om die HTTP-opskrifte te gebruik X-Frame-Options or Content-Security-Policy om raamwerk te beheer. Hierdie opsies is meer betroubaar en veilig en werk selfs al is JavaScript gedeaktiveer. Die JavaScript-metode moet slegs as 'n laaste uitweg gebruik word as jy nie beheer het oor die bediener om HTTP-opskrifte te stel nie. Vir elke voorbeeld, vervang yourdomain.com met jou werklike domein.

Apache – Wysig jou .htaccess lêer soos volg:

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

Nginx - Verander jou bedienerblok soos volg:

add_header X-Frame-Options SAMEORIGIN;
add_header Content-Security-Policy "frame-ancestors 'self' yourdomain.com";

IIS – doen dit deur die volgende by jou te voeg web.config lêer:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Content-Security-Policy" value="frame-ancestors 'self' yourdomain.com" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

WordPress – doen dit deur hierdie kode by jou functions.php-lêer by te voeg:

function add_security_headers() {
  header('X-Frame-Options: SAMEORIGIN');
  header("Content-Security-Policy: frame-ancestors 'self' yourdomain.com");
}
add_action('send_headers', 'add_security_headers');

Hierdie konfigurasies sal slegs toelaat dat jou bladsy in iframes ingebed word op die presiese domein wat jy spesifiseer, nie op enige domein subdomeine nie. As jy sekere subdomeine wil toelaat, sal jy hulle eksplisiet moet lys, soos subdomain1.yourdomain.com subdomain2.yourdomain.com, En so aan.

Laat toe om jou inhoud van verskeie domeine af te raam

Jy kan veelvuldige domeine spesifiseer met die Content-Security-Policy HTTP-reaksie-opskrif en die raam-voorouers-direktief. 'n Spasie moet elke domein skei. Hier is 'n voorbeeld:

Content-Security-Policy: frame-ancestors 'self' domain1.com domain2.com domain3.com;

Apache – Wysig jou .htaccess lêer soos volg:

Header always set X-Frame-Options SAMEORIGINHeader always set Content-Security-Policy "frame-ancestors 'self' domain1.com domain2.com domain3.com"

Nginx - Verander jou bedienerblok soos volg:

add_header X-Frame-Options SAMEORIGIN;add_header Content-Security-Policy "frame-ancestors 'self' domain1.com domain2.com domain3.com";

IIS – doen dit deur die volgende by jou te voeg web.config lêer:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
      <add name="Content-Security-Policy" value="frame-ancestors 'self' domain1.com domain2.com domain3.com" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

Laat iframing van jou inhoud toe vanaf 'n jokertekendomein

U kan ook 'n jokerteken spesifiseer vir alle subdomeine met die Content-Security-Policy HTTP-reaksie-opskrif en die raam-voorouers-direktief. Hier is voorbeelde van die Content-Security-Policy kode wat opgedateer moet word:

Content-Security-Policy: frame-ancestors 'self' *.yourdomain.com;

Apache – Wysig jou .htaccess lêer soos volg:

Header always set Content-Security-Policy "frame-ancestors 'self' *.yourdomain.com"

Nginx - Verander jou bedienerblok soos volg:

add_header Content-Security-Policy "frame-ancestors 'self' *.domain1.com *.domain2.com *.domain3.com";

IIS – doen dit deur die volgende by jou te voeg web.config lêer:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Content-Security-Policy" value="frame-ancestors 'self' *.yourdomain.com" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

Douglas Karr

Douglas Karr is CMO van Maak INSIGTE oop en die stigter van die Martech Zone. Douglas het tientalle suksesvolle MarTech-opstartondernemings gehelp, het gehelp met die omsigtigheidsondersoek van meer as $5 miljard in Martech-verkrygings en -beleggings, en gaan voort om maatskappye te help met die implementering en outomatisering van hul verkoops- en bemarkingstrategieë. Douglas is 'n internasionaal erkende digitale transformasie en MarTech deskundige en spreker. Douglas is ook 'n gepubliseerde skrywer van 'n Dummie-gids en 'n besigheidsleierskapboek.

verwante Artikels

Terug na bo knoppie
Sluiting

Advertensieblok bespeur

Martech Zone is in staat om hierdie inhoud gratis aan u te verskaf, want ons verdien ons webwerf deur advertensie-inkomste, geaffilieerde skakels en borgskappe. Ons sal dit waardeer as jy jou advertensieblokkering sal verwyder terwyl jy ons webwerf bekyk.