Kontenta Merkatumado

Iframe Breaking: Kiel Ĉesigi Neaŭtorizitan Iframeton De Via Enhavo

Vizitanto de mia retejo iam informis min kiam li klakis sur unu el miaj ligiloj Twitter; li estis alportita al mia retejo kun granda ŝprucfenestro kaj malica koda averto. Tio sufiĉas por timigi iun, do mi komencis fari iujn provojn. Estis nenio malbona kun mia retejo - la problemo estis la ligo.

La ligilo en alia retejo produktis ilobreton supre, kiu instigis homojn alklaki malican ligilon dum ŝarĝo de mia retejo en iframe sube. Al plej multaj homoj, mia retejo povus ŝajni disvastigi malican kodon. Mi ne dirus, ke mi ŝatas ajnan retejon, kiu ŝarĝas mian retejon ene de iframe, do mi faris tion, kion farus iu racia geek... Mi ŝargis framrompilon.

Iframado de via retejo tamen ne ĉiam estas malica. Ni lastatempe dividis ilon, Sniply, por aldoni alvokon (CTA) al iu retejo, kiun vi dividas. Ĝi faras tion enigante vian tutan retejon en iframon kaj aplikante div super via enhavo kun la alvoko.

Sed mi estas sufiĉe aparta pri mia enhavo kaj la klopodo, kiun mi faris Martech Zone, do mi ne volas, ke iu ajn iframe mian enhavon, eĉ kun lig-kundivida platformo. Farante iujn esplorojn, ekzistas sufiĉe multaj manieroj trakti ĉi tion.

Kiel Ĉesi Iframi Vian Enhavon Per JavaScript

Ĉi tiu JavaScript-kodo kontrolas ĉu la nuna fenestro (self) ne estas la plej supra fenestro (top). Se ĝi ne estas, tio signifas, ke la paĝo estas en kadro, iframe aŭ simila, kaj la skripto redirektas la plej supran fenestron al la URL de la nuna fenestro. Ĉi efike eksplodas de la iframo.

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

Estas pluraj malavantaĝoj al ĉi tiu aliro:

  1. Fido je JavaScript: Se la uzanto havas JavaScript malŝaltita, ĉi tiu metodo ne funkcios.
  2. Prokrastoj: Povas ekzisti iometa prokrasto antaŭ la ekzekuto de JavaScript, dum kiu la enkadrigita versio de via retejo ankoraŭ povus esti videbla.
  3. Kruc-Originaj Limigoj: En iuj situacioj, la Sama Origina Politiko povas malhelpi ĉi tiun skripton funkcii kiel celite. Se la gepatra dokumento estas sur malsama domajno, ĝi eble ne povos aliri top.location.href.
  4. Potencialo por Frame-Busting-Busters: Ekzistas ankaŭ skriptoj (nomitaj fram-rompaj-rompiloj) kiuj povas malhelpi skriptojn fram-rompantajn funkcii.

La pli bona aliro estas uzi HTTP-respondotitolojn.

X-Frame-Opcioj kaj Enhavo-Sekureco-Politiko

ambaŭ X-Frame-Options kaj Content-Security-Policy (CSP) estas HTTP-respondaj kaplinioj uzataj por plibonigi la sekurecon de retejo. Ili ĉiu servas iomete malsamajn celojn kaj havas malsamajn nivelojn de fleksebleco.

X-Frame-Options estas pli malnova HTTP-kapo specife desegnita por kontroli ĉu via retejo povas esti enigita en a <frame>, <iframe>, <embed><object> sur alia retejo. Ĝi havas tri eblajn direktivojn:

  1. DENY – La paĝo ne povas esti montrata en kadro, sendepende de la retejo provanta fari tion.
  2. SAMEORIGIN – La paĝo povas esti montrata nur en kadro sur la sama origino kiel la paĝo mem.
  3. ALLOW-FROM uri – La paĝo nur povas esti montrata en kadro sur la specifita origino.

tamen, X-Frame-Options estas limigita pro tio ke ĝi ne povas pritrakti pli kompleksajn scenarojn, kiel permesi enkadrigi de pluraj malsamaj originoj aŭ uzi ĵokerojn por subdomajnoj. Ne ĉiuj retumiloj subtenas la ALLOW-FROM direktivo.

Content-Security-Policy, aliflanke, estas multe pli fleksebla kaj potenca HTTP-kapo. Dum ĝi povas fari ĉion X-Frame-Options povas fari kaj multe pli, ĝia ĉefa celo estas malhelpi larĝan gamon de kodaj injektaj atakoj, inkluzive de transreta skribo (XSS) kaj clickjacking. Ĝi funkcias specifante blankan liston de fidindaj fontoj de enhavo (skriptoj, stiloj, bildoj, ktp.).

Por kontroli kadrojn, CSP uzas la frame-ancestors direktivo. Vi povas specifi plurajn fontojn, inkluzive de pluraj domajnoj kaj ĵokeraj subdomajnoj. Jen ekzemplo:

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

Ĉi tio permesus al la paĝo esti enkadrigita sur sia propra retejo ('self'), plu yourdomain.com, kaj sur ajna subdomajno de domain2.com.

CSP estas rekomendita kiel anstataŭaĵo por X-Frame-Options, ĉar ĝi povas pritrakti ĉion X-Frame-Options povas fari, kaj multe pli. Dum la plej multaj modernaj retumiloj subtenas CSP, eble ankoraŭ ekzistas kelkaj malnovaj aŭ malpli oftaj retumiloj kiuj ne plene subtenas ĝin.

Kiel Ĉesi Iframi Vian Enhavon Per HTML

Nun ekzistas meta-etikedo Enhavo-Sekureco-Politiko, kiu povas esti deplojita, kiu malŝaltas la kapablon iframe vian enhavon:

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

La efikeco de la HTML meta-etikedo estas limigita ĉar ne ĉiuj retumiloj respektas la Content-Security-Policy kiam oni agordas per meta-etikedo.

Kiel Ĉesi Iframi Vian Enhavon Per HTTP-Titoloj

Estas pli bone uzi la HTTP-kapojn X-Frame-Options or Content-Security-Policy por kontroli enkadrigo. Ĉi tiuj opcioj estas pli fidindaj, kaj sekuraj, kaj funkcias eĉ se JavaScript estas malŝaltita. La JavaScript-metodo devas esti uzata nur kiel lasta rimedo se vi ne havas kontrolon de la servilo por agordi HTTP-kapojn. Por ĉiu ekzemplo, anstataŭigu yourdomain.com kun via reala domajno.

Apache – Modifi vian .htaccess dosiero jene:

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

Nginx - Modifi vian servilan blokon jene:

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

IIS – faru tion aldonante la jenon al via web.config dosiero:

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

WordPress – faru tion aldonante ĉi tiun kodon al via functions.php-dosiero:

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');

Ĉi tiuj agordoj nur permesos al via paĝo esti enigita ene de iframoj sur la ĝusta domajno, kiun vi specifas, ne sur iuj ajn domajnaj subdomajnoj. Se vi volas permesi iujn subdomajnojn, vi devos listigi ilin eksplicite, kiel subdomain1.yourdomain.com subdomain2.yourdomain.com, kaj tiel plu.

Permesu Iframi Vian Enhavon De Multoblaj Domajnoj

Vi povas specifi plurajn domajnojn per la responda kaplinio de Enhavo-Sekureco-Politiko HTTP kaj la direktivo de kadro-prapatroj. Spaco devas apartigi ĉiun domajnon. Jen ekzemplo:

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

Apache – Modifi vian .htaccess dosiero jene:

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

Nginx - Modifi vian servilan blokon jene:

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

IIS – faru tion aldonante la jenon al via web.config dosiero:

<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>

Permesu Iframi Vian Enhavon De Sovaĝa Domajno

Vi ankaŭ povas specifi ĵokeron por ĉiuj subdomajnoj kun la Content-Security-Policy HTTP-responda kaplinio kaj la direktivo de kadro-prapatroj. Jen ekzemploj de la Content-Security-Policy kodo, kiu devas esti ĝisdatigita:

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

Apache – Modifi vian .htaccess dosiero jene:

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

Nginx - Modifi vian servilan blokon jene:

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

IIS – faru tion aldonante la jenon al via web.config dosiero:

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

Douglas Karr

Douglas Karr estas CMO de OpenINSIGHTS kaj la fondinto de la Martech Zone. Douglas helpis dekduojn da sukcesaj MarTech-noventreprenoj, helpis en la konvena diligento de pli ol $ 5 miliardoj en Martech-akiroj kaj investoj, kaj daŭre helpas firmaojn en efektivigado kaj aŭtomatigo de siaj vendaj kaj merkatigstrategioj. Douglas estas internacie agnoskita cifereca transformo kaj MarTech-eksperto kaj parolanto. Douglas ankaŭ estas publikigita verkinto de la gvidisto de Dummie kaj komerca gvidadlibro.

rilataj Artikoloj

Reen al la supra butono
Fermi

Adbloko Detektita

Martech Zone kapablas provizi al vi ĉi tiun enhavon senkoste ĉar ni monetigas nian retejon per reklamaj enspezoj, filiaj ligiloj kaj sponsorado. Ni dankus se vi forigus vian reklamblokilon dum vi rigardas nian retejon.