2015-06-20 10 views
9

Questo è uno script XSS:Gestione dei riferimenti di carattere nello script un programma integrato di SVG tag

<svg><script>&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</script></svg> 

Il codice tra i tag <script> sarà tradotto al alert(1) dal browser ed eseguito.

Ma se non utilizzo un tag <svg> il codice non verrà tradotto in script. Qualcuno può dirmi perché questo succede? Come funziona il tag <svg>?

+1

Perché i downvotes? Sembra una bella domanda. –

+0

Confermato in Chrome, sembra uno strano effetto di come viene analizzato il DOM. Dubito fortemente che qui siano coinvolti alcuni "standard". –

+0

@NielsKeurentjes Tutto qui è esplicitamente definito dagli standard XML e html 5. –

risposta

4

L'uso di character references all'interno dei tag di script è esplicitamente disabilitato dal parser HTML in base alle specifiche HTML 5.

HTML5 ha uno separate script parsing mode come uno dei numerosi modi di tokenizzazione che variano in base al contesto. L'analisi degli script non consente i riferimenti ai caratteri, alcune delle altre modalità di analisi.

SVG è basato su XML dove le regole sono molto più semplici e più semplici. Fondamentalmente i riferimenti ai caratteri sono permessi ovunque perché ci sono aren't different context sensitive parsing modes.

Per SVG in HTML, le specifiche HTML says

L'elemento svg dal namespace SVG cade nel contenuto incorporato, contenuto fraseggio, e il flusso categorie di contenuti ai fini dei modelli contenuti in questa specifica.

In altre parole, analizza tutto il testo SVG come contenuto di frasi. Tutto SVG è una modalità di tokenizzazione personalizzata per il parser HTML 5.

+0

Per favore controlla la mia nuova risposta :) Come detto, la tua risposta è afaica completamente corretta, ma non la spiegazione completa di questo caso specifico. –

0

Dato che non ero molto soddisfatto delle citazioni di altre risposte sul ragionamento alla base di questo comportamento, ho intensificato questo "problema" allo WHATWG mailing list, in quanto presenta alcune possibili scappatoie (anche se piccole) di sicurezza. Per citare Ian Hickson (redattore capo dello standard HTML5 al W3C) verbatim:

Non è grande, ma è intenzionale. All'interno <svg> e <math> blocchi, usiamo il "contenuto straniero" modalità di analisi in cui l'analisi è molto più simile al parsing legacy XML di parsing eredità HTML:

https://html.spec.whatwg.org/#parsing-main-inforeign

nota, in particolare, che il comportamento speciale per <script> qui non include la modifica della modalità tokeniser, come nel contenuto non estraneo .

Così, mentre la risposta di Robert è essenzialmente una collezione di citazioni corrette relative al standalone contenuti HTML5 e SVG, c'è una sezione separata specifica per quanto riguarda il parsing di 'contenuti straniero' per spiegare questo comportamento. E Ian è d'accordo che non è davvero una soluzione perfetta, ma onestamente non riesco a pensare a nessuno che sia compatibile sia con "semi-SGML" che con l'analisi XML.