Questo non ha nulla a che fare con i filtri XSS, come evidenziato dallo stesso comportamento su molti browser. Non è una cosa queryString, è solo contenuto. La risposta è semplice e rassicurante.
Tag script inline aggiunti tramite .innerHTML=strHTML
o il metodo DOM elm.appendChild(script)
non eseguito. Ciò significa che è possibile iniettare tag dannosi tutto il giorno; a meno che tali tag non colpiscano il browser come HTML codificato (può essere visto in view-source), sono benigni.
Il metodo sovrautilizzato $(elm).html(strHTML)
di jQuery eseguirà script, ma solo perché analizza il contenuto della stringa e invia il contenuto di tag <script>
alla funzione window.eval()
, che viene eseguita. Tuttavia, per impostazione predefinita, il contenuto del tag di script dinamico NON viene eseguito.
Il tuo esempio usa react, che ha un DOM virtuale che riconcilia internamente l'HTML della pagina esistente e l'HTML dinamico usando un modello non DOM. Una volta trovate le modifiche, viene eseguita una serie di piccole sostituzioni di elementi DOM. Anche in questo caso, l'aggiunta di tag <script>
tramite DOM non esegue il contenuto dei tag, quindi questo è sicuro in qualsiasi browser.
Devi ancora cercare i "gestori di eventi" basati sugli attributi come onerror
, onload
, onmouseover
, ecc, ma <script>somethiungBad()</script>
è benigno se non viene stampato da un server o aggiunto "in modo intelligente" di jQuery. Il framework React utilizzato nell'esempio potrebbe filtrare quegli attributi problematici per te, non sono un esperto di React ...