L'XSS riflesso è impossibile, quando i meta-caratteri HTML, ad esempio, e, sono codificati, e l'output del risultato nel contesto HTML?

3

Is reflected XSS impossible, when HTML meta-characters, e.g., < and >, are encoded, and the result output in HTML context?

Ho un sito web che mostra il percorso dell'URL direttamente nel contesto HTML, cioè,

www.mysite.com/helloworld risulta in helloworld visualizzato tra i tag <body> .

Tuttavia, alcuni meta-caratteri, ad es. < e > , sono in HTML di escape.

In questo caso, è possibile eseguire un attacco XSS riflesso, come un qualche attacco di codifica UTF esoterico, ecc.?

    
posta Shuzheng 23.07.2018 - 20:21
fonte

2 risposte

6

Dipende dal contesto. Suppongo che tu stia utilizzando la funzione htmlentities() , che sarebbe generalmente sicura. Fa più o meno esattamente la stessa cosa di htmlspecialchars() .

Entrambe sono protette contro XSS generico e prevengono l'XSS basato sugli eventi quando il parametro sterilizzato viene iniettato in un tag HTML.

Entrambi non impediscono gli attacchi di javascript: , che possono verificarsi se si inserisce il valore del parametro in un collegamento, iframe o un altro tag simile. Se inserisci un src o href da uno qualsiasi di questi tag, ti consigliamo di rimuovere prima tutti gli spazi bianchi dal parametro e quindi di controllare sia javascript: che data: .

javascript:alert(0) ti darà un avviso quando inserito in un link o in un iframe. data:text/javascript:alert(0) farà lo stesso. data:text/html:<script>alert(0);</script> fa la stessa cosa e ignora strip_tags .

La ragione per la prima rimozione degli spazi bianchi, è di impedire a un utente malintenzionato di eliminare un'interruzione di riga / un carattere CRLF nel mezzo del loro carico utile, quindi PHP lo legge come non javascript: o data: quando blocca il payload, ma verrà comunque eseguito in quanto javascript lo ignorerà.

Spero che questo spieghi che tipo di attacchi sono possibili, è molto facile affermare che htmlentities() e htmlspecialchars() sono una soluzione adatta al problema, ma a seconda della situazione, può essere estremamente pericoloso consigli.

    
risposta data 23.07.2018 - 21:28
fonte
0

Se le virgolette non sono sfuggite e il testo è inserito all'interno di un attributo html quotato, allora un valore che imposta un attributo javascript come " onmouseover="alert(0) può funzionare.

    
risposta data 23.07.2018 - 23:16
fonte

Leggi altre domande sui tag