Script FrameBusting

5

È risaputo che caricare il tuo sito all'interno di un frame su un altro sito può potenzialmente esporre il tuo sito a tutti i tipi di problemi e, in generale, non è una buona idea se hai dei dati sensibili da proteggere.
Pertanto, gli script di FrameBusting si sono verificati, in genere uno script semplice che viene eseguito mentre il sito viene caricato; se è in un frame si ricarica da solo senza frame.
Di solito qualcosa di semplice su queste linee:

if (top != self) 
    top.location.replace(location);

Ora, se sei su un sito pubblico, come forum o sito di social network, dove è comune pubblicare link e visualizzarli in una cornice, potresti voler creare framebust del tuo sito (se hai qualsiasi cosa sensibile lì, sono utenti che accedono, ecc.) fuori dai frame del social networking. Ma anche tu non vuoi interrompere l'esperienza dell'utente e fargli pensare che il sito a cui sono collegati sia sospetto ... Quindi potresti essere tentato di dare loro un popup per informarli su cosa sta succedendo - ma che potrebbe spaventarli ancora di più ....

Quindi - quale pensi che sarebbe la soluzione migliore COMPLETA, considerando l'insieme di contesto, rischi e conseguenze ed evitando il "teatro della sicurezza"?

  • Lascia il sito all'interno di una cornice
  • Framebust in silenzio
  • Fornisci un popup, solo per notificare all'utente cosa sta succedendo
  • Fornisci un popup all'utente con l'opzione per annullare

P.S. Il sito era QUESTO sito, e l'ho scoperto pubblicando il sito su numerosi gruppi relativi alla sicurezza su LinkedIn dopo l'avvio della beta pubblica ( perché non lo sei?;)), avendo ricevuto risposte negative negative ... Si scopre che SE va per l'opzione 3 - popup con l'opzione no da cancellare. Crosspost come bug alla meta ....

    
posta AviD 21.11.2010 - 02:26
fonte

2 risposte

5

Bella domanda. FrameBusting è difficile da implementare correttamente e in quasi tutti i casi è rotto a causa di incompatibilità di browser, bug o errori degli sviluppatori.

Recentemente ci siamo imbattuti in una domanda abbastanza simile qui: link . Dove viene detto per richiedere all'utente con una breve spiegazione di cosa sta succedendo. Non posso essere in disaccordo, la spiegazione più semplice - meglio per la comprensione dell'utente, fai solo attenzione a non perdere dettagli che tocchino la privacy degli utenti. Con i dettagli forniti, l'utente deve pensare da solo a cosa non fare paura.

E OWASP ha un buon documento di ricerca su questo argomento: link

    
risposta data 21.11.2010 - 02:55
fonte
3

La soluzione che preferirei a un utente sarebbe: consenti al tuo sito di essere incorniciato, ma assicurati che i siti dannosi non possano recare danno. Non continuare la sessione dell'utente da un'altra scheda se ci si trova in una cornice. Considera di rendere il sito di sola lettura in questo caso. Se si consente all'utente di accedere nuovamente al frame, visualizzare un avviso. Ovviamente questo è un sacco di lavoro da implementare per un caso d'uso raro, quindi potrebbe non essere pratico.

Se vuoi davvero smantellare i frame, ti suggerirei una soluzione non invasiva. Usa il normale codice framebusting, magari in combinazione con le Opzioni X-Frame Intestazione HTTP e fornire una nota evidenziata sulla pagina invece di un popup.

A sidenote: il modello di sicurezza HTML si basa sul fatto che un sito non può fare cose ad altri siti. Questo ci dà la politica della stessa origine. Molti hack si basano sul bypassare questo, iniettando il codice in altri siti, ecc. Il clickjacking è correlato, ma invece di usare il codice per eseguire una funzione nell'altro sito, la pagina di attacco induce l'utente a fare clic da qualche parte.

Personalmente, penso che il modello di sicurezza HTML, in cui i server si fidano del browser per mantenere gli script confinati, è concettualmente imperfetto. Preferirei un modello in cui il codice possa fare quasi tutto ciò che l'utente può fare, e invece si affiderebbero invece a token di sicurezza. Certo, uno script di attacco potrebbe inviare un modulo per eliminare un post, ma senza l'ID di sessione e la password corretti sarebbe ignorato. Ciò consentirebbe applicazioni molto più interessanti come mashup, aggregatori di contenuti client-only, ecc. Ovviamente è troppo tardi per passare il web a un tale modello di sicurezza ora.

Sto scrivendo questo per motivare il mio consiglio: anche senza fare affidamento sulla separazione imposta dal browser (ad esempio framebusting) è possibile scrivere siti sicuri in cui ogni azione è autorizzata dall'utente. Non fare affidamento sulla sicurezza sui no-frame, ma supponiamo che il tuo sito sia incorniciato, che il SOP sia compromesso e che il sito del frame possa premere pulsanti (con o senza strumentalizzare l'utente).

    
risposta data 21.02.2013 - 12:08
fonte

Leggi altre domande sui tag