XSS nel tag title HTML

1

Ho ricevuto un parametro nell'URL che viene visualizzato nel tag HTML <title> . > e < sono debitamente escapati. Charset non può essere cambiato. Non ci sono varianti (ad esempio esadecimale, url, doppio url, base64) di codifica < e > .

Il tag title è un po 'un caso speciale, poiché non ha alcun attributo onEvent. C'è un altro modo per eseguire un attacco XSS senza chiudere il tag con </title> ?

    
posta Jin 21.10.2016 - 14:19
fonte

2 risposte

3

Non tratterei il <title> tag in modo diverso rispetto a qualsiasi altro tag, lika a <div> . Il contesto di cui stai parlando (tra tag HTML) è ciò che OWASP chiama "HTML Element Content" nella loro prevenzione XSS foglio cheet . Raccomandano le seguenti regole di sostituzione:

& --> &amp;
< --> &lt;
> --> &gt;
" --> &quot;
' --> &#x27;
/ --> &#x2F; 

Tuttavia, non posso per la vita di me capire come saresti in grado di fare qualche danno senza < o > , quindi penso (al contrario di sapere ) che sei al sicuro. Tuttavia, non c'è nulla di male nel seguire i consigli OWASP alla lettera.

In altri contesti sono richieste altre regole igienico-sanitarie, quindi non prendere questo come solo l'endocing < e > è sempre OK. Non è.

    
risposta data 21.10.2016 - 14:35
fonte
1

Se la domanda è "Perché abbiamo bisogno di codificare caratteri diversi da < e >" , questo è possibile perché esistono casi angolari. Un esempio ingenuo sarebbe quando l'input da una casella di testo viene utilizzato per generare, ad esempio, un href o una sorgente di immagini al volo.

possiblities:

<img src="&{alert('XSS Vulnerable')};"> 

Il carattere speciale "&" viene talvolta interpretato come un nuovo segmento di codice JavaScript (entità).

" [event]='code' 

In molti casi può essere possibile per un utente malintenzionato inserire una stringa di exploit, con la sintassi sopra, in un tag HTML che dovrebbe essere stato come:

<A HREF="exploit string">Go</A> 

risultante in:

<A HREF="" [event]='code'">Go</A>

<b onMouseOver="self.location.href='http://bad.com/'">text</b> 

Mentre il cursore del client si sposta sul testo in grassetto, si verifica un evento intrinseco e viene eseguito il codice JavaScript.

Ci sono molti altri casi angolari / oscuri (nel mondo di oggi) in cui la codifica è appena < o > potrebbe non essere abbastanza Cerca il link per un run discreto (se non leggermente obsoleto) di casi simili.

    
risposta data 21.10.2016 - 17:10
fonte

Leggi altre domande sui tag