Perché i browser applicano la stessa politica di sicurezza all'origine sugli iframe?

58

Ho fatto un piccolo test su Chrome (V37) oggi. Ho creato una piccola pagina e l'ho caricata sul browser:

<!DOCTYPE html>
<html>
<head>
    <title>Untitled Document</title>
</head>
<body>
    <p>Normal page</p>
    <iframe src="https://security.stackexchange.com/"/></body></html>

Ispezionandolaconsolehotrovatoquestomessaggiodierrore:

Refusedtodisplay'https://security.stackexchange.com/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

Perché i browser devono applicare la politica della stessa origine su iframe s?

    
posta sampathsris 22.09.2014 - 06:58
fonte

2 risposte

39

Revisione: criterio della stessa origine

Innanzitutto, chiariamo che il comportamento osservato qui (l'iframe non viene visualizzato) è molto più rigoroso rispetto alla politica di origine originale predefinita. Se già lo capisci, passa a " Cosa sta realmente accadendo " di seguito.

Per verificare, la politica della stessa origine impedisce agli script di avere accesso programmatico ai contenuti delle risorse cross-origin. Considera come la politica della stessa origine si applica a vari tipi di risorse:

  • Immagini: un tag <img> mostrerà visivamente un'immagine di origine incrociata a un utente, ma non consentirà a uno script di leggere il contenuto dell'immagine quando caricata in <canvas> (cioè toDataURL fallirà se il canvas contiene immagini di origine incrociata)
  • Script: gli script di origine incrociata verranno eseguiti quando si fa riferimento in un elemento <script> , ma la pagina può solo eseguire lo script, non leggere contenuti.
  • Iframe: come le immagini, i contenuti di una pagina di origine incrociata vengono visualizzati visivamente all'utente, ma agli script nella pagina esterna non è consentito l'accesso ai contenuti della pagina con frame.

La politica della stessa origine si applica agli iframe per lo stesso motivo per cui si applica a tutti gli altri tipi di risorse: la pagina Web che viene incorniciata (o l'immagine visualizzata o la risorsa a cui si accede tramite Ajax) viene recuperata utilizzando le credenziali dal origine della risorsa (ad esempio, la richiesta HTTP di recuperare una risorsa da google.com include i cookie del mio browser impostati per google.com ). Alla pagina che ha emesso la richiesta non dovrebbe essere dato l'accesso in lettura a una risorsa recuperata con credenziali di origine diversa.

Cosa sta realmente accadendo: X-Frame-Options

Tuttavia, il comportamento che vedi qui è più rigido della politica della stessa origine: la pagina con frame non viene mostrata affatto . Il server di origine incrociata che ospita la (con-essere) pagina con frame richiede questo comportamento di blocco inviando un X-Frame-Options intestazione di risposta , che specifica in che modo è possibile inquadrare la pagina.

  • DENY The page cannot be displayed in a frame, regardless of the site attempting to do so.
  • SAMEORIGIN The page can only be displayed in a frame on the same origin as the page itself.
  • ALLOW-FROM uri The page can only be displayed in a frame on the specified origin.

Qui, il sito invia X-Frame-Options: SAMEORIGIN , il che significa che il sito può essere incorniciato solo da pagine con la stessa origine della pagina con frame.

Dal punto di vista della sicurezza, questo viene fatto per prevenire clickjacking (chiamato anche "attacco di riparazione dell'interfaccia utente") . In un attacco di clickjacking, la pagina visualizza un componente attivato da clic di un altro sito all'interno di <iframe> e induce l'utente a fare clic su di esso (in genere sovrapponendo il componente di destinazione a una funzione apparentemente cliccabile del sito di framing).

Per un esempio banale, un sito potrebbe posizionare un <iframe> trasparente di http://security.stackexchange.com in modo che il collegamento "disconnetti" nel sito incorniciato fosse direttamente sopra a un pulsante "Fai clic qui per richiedere il tuo denaro gratuito". Quando si visualizza la pagina di framing, l'utente tenta di richiedere il denaro gratuito e improvvisamente si ritrova disconnesso dallo Stack Exchange. Quando http://security.stackexchange.com invia un'intestazione X-Frame-Options: SAMEORIGIN , la pagina malevola di origine incrociata riceve solo una <iframe> vuota; l'utente non fa involontariamente clic su un link di disconnessione perché nessun contenuto dal sito incorniciato lo ha fatto sulla pagina renderizzata.

OWASP ha una pagina che riporta in dettaglio difese contro il clickjacking .

    
risposta data 22.09.2014 - 15:26
fonte
38

Gli amministratori di security.stackexchange.com hanno configurato il sito in modo da non lasciarlo incorniciare su altri siti. Questo di solito viene fatto per prevenire attacchi clickjacking, per impedire ad altri di incorporare security.stackexchange.com in una pagina piena di annunci e di salvare traffico. Puoi leggere ulteriori informazioni su X-Frame-Options header qui .

Questa protezione è disattivata per impostazione predefinita.

    
risposta data 22.09.2014 - 07:06
fonte

Leggi altre domande sui tag