XSS al di fuori del DOM

1

Ho il seguente JS (usando jQuery per brevità, ma non è necessario per la domanda):

$("<i></i>").html(userInput);

È possibile che qualcuno inserisca una stringa, userInput, in modo tale da eseguire correttamente un attacco XSS?

Ho provato a inserire un tag script con un avviso, ma non viene eseguito. Credo che poiché l'elemento è esterno al DOM XSS non funzionerà, ma non sono riuscito a trovare alcuna risorsa per confermarlo.

    
posta winhowes 03.02.2015 - 23:59
fonte

2 risposte

1

Mai valuta input non fidati come HTML. Anche se il DOM è disconnesso (cioè non inserito nel documento), la valutazione dell'HTML può ancora causare XSS. Il tuo esempio specifico può essere sfruttato utilizzando attributi evento :

var userInput = '<img onerror="alert(\'XSS\')" src="bogusurl:">';
$("<i></i>").html(userInput);

Se veramente devi analizzare il codice HTML non attendibile in un browser, utilizza DOMParser API (con text/html ).

Un altro modo per prevenire l'attacco è utilizzare una politica di sicurezza del contenuto politica di sicurezza del contenuto con una direttiva script-src che esclude il token 'unsafe-inline' . CSP è solo un controllo del danno e non dovrebbe essere usato come sostituto alla corretta sanitizzazione dell'input.

    
risposta data 21.02.2015 - 23:45
fonte
0

Questa forma di XSS basato su DOM si chiama XSS autoinflitto , che può essere sfruttato tramite Clickjacking . È basato su DOM, perché JavaScript ha introdotto la vulnerabilità XSS dopo che il codice HTML statico è stato visualizzato dal browser.

Sebbene possa essere ingannevole sfruttare xss autoinflitto, questa debolezza dovrebbe essere evitata, usare $('<i></i>').text(userInut) o sfoglia l'HTML .

    
risposta data 04.02.2015 - 02:47
fonte

Leggi altre domande sui tag