Come prevenire l'auto-XSS?

1

Sto creando un sito Web che utilizza esclusivamente API REST per tutte le funzionalità e funzionalità, dalla registrazione e accesso per il recupero dei dati e il popolamento della pagina Web utilizzando Moustache come motore di template per gli oggetti.

L'autenticazione è token in base al quale token è stato aggiunto dinamicamente all'intestazione utilizzando le funzioni JS per impedire l'attacco CSRF. Tutte le funzioni quando interagiscono con i dati di input dell'utente sono disinfettanti per prevenire l'attacco XSS. Quindi praticamente ogni azione valida ha una funzione JS associata associata con la protezione XSS e CSRF abilitata.

Che cosa succede se un utente desidera ignorare queste funzioni ed eseguire le proprie funzioni dalla console eseguendo le stesse azioni senza protezioni XSS. Un'opzione è implementare la protezione XSS lato server.

Ora, se qualcuno cerca di ingannare gli utenti per incollare del codice JS nella console che essenzialmente ha accesso ai token di autenticazione e può eseguire richieste indesiderate che possono danneggiare l'utente. Come mitigare questo attacco o esiste un modo per prevenire o identificare tali azioni?

    
posta Harwee 13.03.2018 - 09:43
fonte

4 risposte

5

what if someone tries to trick users to paste some JS code in console

Cosa succede se qualcuno inganna gli utenti per installare malware sul proprio computer?
Cosa succede se qualcuno chiama un falso numero di supporto tecnico dopo aver riscontrato un problema con il tuo sito Web e gli scammer fanno qualcosa di male all'account dell'utente sul tuo sito web?
Che cosa succede se le persone su 4chan pubblicano degli smartphone con ricarica wireless veloce in un forno a microonde e la gente effettivamente prova e distrugge il telefono?

Penso che questo cada nella categoria "al di fuori del tuo controllo", almeno per quanto riguarda le misure tecniche.

L'inserimento di codice personalizzato nella console di uno sviluppatore non è qualcosa che puoi proteggere efficacemente, a meno che non sia all'interno della tua azienda (o di un cliente) e puoi imporre / consigliare un criterio aziendale per disabilitare la console nei browser per i non sviluppatori o qualcosa. E anche allora, probabilmente è più fastidioso per gli utenti legittimi che veramente utile.

Ciò che puoi fare è educare e informare persone. Non è limitato all'auto-XSS: se ti chiedo di incollare del codice in un file di testo e rinominarlo in vbs, hai lo stesso identico problema. L'esecuzione di codice non affidabile è il problema qui, non solo il cosiddetto auto-XSS.

    
risposta data 18.03.2018 - 22:01
fonte
2

Non c'è modo di distinguere una chiamata API fatta dall'app "reale" da quella creata dalla console. Il server vede solo la richiesta HTTP e sembra esattamente la stessa cosa. Non c'è davvero niente che puoi fare qui.

Self XSS non è una vulnerabilità nel tuo sito e quindi non puoi ripararlo. È una vulnerabilità nel browser, o forse piuttosto nelle persone. Quelli che possono fare la differenza qui sono i venditori di browser - e infatti, hanno. La prima volta che accendi la console (almeno in Firefox), ti viene dato un avvertimento che spiega che si tratta di un luogo pericoloso e che non dovresti semplicemente copiare le cose qui.

    
risposta data 18.03.2018 - 23:53
fonte
1

Alcuni siti come Facebook stampano un grosso avvertimento sulla console degli sviluppatori (penso che utilizzi solo console.log ) spiegando agli utenti che non dovrebbero mai incollare il codice lì.

    
risposta data 19.03.2018 - 11:17
fonte
0

Come quello che ha detto Luc, è impossibile prevenire completamente l'XSS, o qualsiasi cosa legata alla sicurezza.

Tuttavia, a differenza delle altre risposte che dichiarano che è possibile visualizzare solo un avviso visivo utilizzando console.log (), in realtà è possibile disabilitare completamente la console - vedere questo post per i dettagli completi. Però è una cattiva idea affidarsi alla protezione lato client contro XSS.

Usando questo codice dal post collegato, sarai in grado di disabilitare la console per sviluppatori sul lato client:

Object.defineProperty(window, "console", {
    value: console,
    writable: false,
    configurable: false
});

var i = 0;
function showWarningAndThrow() {
    if (!i) {
        setTimeout(function () {
            console.log("%cWarning message", "font: 2em sans-serif; color: yellow; background-color: red;");
        }, 1);
        i = 1;
    }
    throw "Console is disabled";
}

var l, n = {
        set: function (o) {
            l = o;
        },
        get: function () {
            showWarningAndThrow();
            return l;
        }
    };
Object.defineProperty(console, "_commandLineAPI", n);
Object.defineProperty(console, "__commandLineAPI", n);
    
risposta data 26.06.2018 - 11:23
fonte

Leggi altre domande sui tag