Perché il filtro Chromes XSS blocca l'iniezione nell'elemento HTML, ma non nell'attributo?

2

Ho questo codice vulnerabile che accetta un parametro GET e lo inserisce in un elemento HTML ( h1 ) e all'interno di un attributo HTML ( data-text ):

$data = $_GET["payload"];
echo "<h1>" .$data. "</h1>";
echo '<div data-role="button"  data-text="' .$data.'"></div>';

L'auditor XSS di Chrome bloccherà <script>alert(1)</script> nel primo echo (all'interno dell'elemento), ma non nel secondo (all'interno dell'attributo) anche se il carico utile potrebbe essere eseguito tramite un gadget di script.

Perché?

    
posta Niv 13.05.2018 - 11:54
fonte

1 risposta

2

Poiché nel secondo caso non vi è alcuna vulnerabilità derivante dal codice HTML (è necessario prima chiudere i tag, ad esempio '"><script>alert(1)</script> , ciò verrà rilevato dall'auditor).

Potresti avere un codice JavaScript che elabora ulteriormente il tuo codice HTML e introduce quindi una vulnerabilità XSS nel secondo caso (ad es. tramite gadget di script ), ma non è questo il XSS Auditor monitor:

The XSS Auditor runs during the HTML parsing phase and attempts to find reflections from the request to the response body. It does not attempt to mitigate Stored or DOM-based XSS attacks.

L'interprete JavaScript verrà eseguito dopo il parser HTML, quindi eventuali vulnerabilità introdotte da JavaScript non verrà catturato dall'auditor XSS.

    
risposta data 13.05.2018 - 14:32
fonte

Leggi altre domande sui tag