Quale possibile utilizzo ha un iFrame per la sicurezza?

7

Sto guardando il codice per un vecchio modulo di accesso che sto riprogettando. È una tabella semplice con due campi di immissione per nome utente e password.

Ma appena prima del tag di fine </table> c'è un iFrame vuoto che assomiglia a

<iframe style="height:0px;width:0px;visibility:hidden" src="about:blank">This is a security measure.</iframe>

Quali possibili misure di sicurezza potrebbero fornire? Non riesco a pensare a nessuno e non posso chiedere al tizio che l'ha messo lì in primo luogo.

    
posta Michael N 26.03.2013 - 00:03
fonte

1 risposta

14

È una misura di sicurezza, come implica la descrizione nel codice. Il iframe funge da meccanismo di protezione contro XSS sfrutta attraverso misure personalizzate dei contro questi stessi tipi di attacco impedendo l'accesso JavaScript ai frame e agli iframe quando non sono pubblicati sullo stesso dominio. Non è davvero necessario scrivere questa parte di HTML direttamente nel documento, poiché potrebbe anche essere scritta dallo stesso JavaScript che sta manipolando il suo contenuto, ma lo sviluppatore di questa soluzione probabilmente voleva rendere chiaro agli sviluppatori futuri che alcuni script esterni stanno verificando il modulo di accesso prima di essere pubblicato e che i meccanismi di prevenzione XSS del browser sono utilizzati per ottenere una migliore sicurezza dell'utente finale durante l'accesso. Ciò è anche strongmente implicito dalla mancanza di un ID per l'iframe, che renderebbe molto più facile la referenziazione.

Lo sviluppatore quindi assocerebbe un elemento script JavaScript a iframe DOM con un codice simile a questo:

window.onload = function () {

    var iframe = document.createElement('iframe');
    iframe.width = "0px";
    iframe.height = "0px";
    iframe.style.visibility = "hidden";
    iframe.id = "noXSSframe";
    iframe.setAttribute("src", "about:blank");

    document.getElementById("formID").appendChild(iframe);

    iframe.addEventListener('load', function (e) {
        var myElement = document.createElement('script');
        myElement.setAttribute('src', '/content/test.js');
        myElement.setAttribute('type', 'text/javascript');

        iframe.contentDocument.body.appendChild(myElement);
    }, false);

}

Questo è solo un esempio e non è necessariamente lo stesso metodo scelto dal tuo sviluppatore, ma dovrebbe essere sufficiente per scopi dimostrativi.

Questo file JavaScript esterno che è stato appena collegato all'iframe verrà quindi scritto in modo tale da tenere conto di essere eseguito attraverso un iframe, facendo riferimento a un oggetto documento principale in modo che sia consentito solo uno script situato nello stesso dominio, mentre eventuali iniezioni XSS che sostituiscono lo script chiamato con uno script ospitato al di fuori del dominio del documento principale, sarebbe chiaramente negato l'accesso ai browser stessi. L'unico modo per impedire ai browser di applicare la stessa politica di origine per XMLHttpRequests è collegando intestazioni aggiuntive alla risposta HTTP del server e consentendo esplicitamente risorsa cross-origin condivisione (CORS) . Questo però non è qualcosa che le iniezioni XSS da sole possono manomettere.

In breve, è un modo elegante per assicurarsi che il codice JavaScript responsabile della manipolazione, verifica e pubblicazione di un modulo di accesso (preparazione e avvio di una richiesta HTTP) sia effettivamente caricato da un file ospitato nello stesso dominio del registro -in forma è attiva, prevenendo efficacemente le iniezioni XSS. Allo stesso tempo, impedisce anche ai siti di phishing di riutilizzare questo modulo di accesso e di inviare richieste di accesso a un altro dominio, se lo script iframe esegue una verifica aggiuntiva, allegando valori di risposta univoci che possono essere verificati da server a fine del modulo POST richiesta.

    
risposta data 26.03.2013 - 21:48
fonte

Leggi altre domande sui tag