Scomposizione dell'attributo tra virgolette

3

Ho un pezzo di codice che consente

[url]someurl[/url] 

Codice BB e lo sostituisce con

<a href="someurl">someurl</a>

Ci vogliono due precauzioni per prevenire XSS.

  1. Sostituisce < , > e " utilizzando un str_replace semplice.
  2. Utilizza un'espressione regolare per rilevare javascript: e data: gestori di protocollo.

Poiché i browser decodificano il valore dell'attributo prima di interpretarlo ulteriormente, puoi aggirare il controllo regex codificando l'URL utilizzando [url]&#x6A ... [/url] .

Quindi ricevo:

<a href="javascript:alert(1)">javascript:alert(1)</a>

Per farla breve: voglio più di un attributo steenkin (chi farebbe clic su un collegamento simile?!)

Posso in qualche modo codificare il mio " , < , ecc. quindi non verrà sostituito da str_replace ma sarà comunque interpretato nel contesto di HTML?

    
posta er4z0r 15.01.2013 - 13:09
fonte

2 risposte

7

Un approccio alla lista nera sarà sempre imperfetto. Ad esempio, in internet explorer puoi usare l'% URI vbscript: per eseguire il codice vbscript. Esistono anche modi per codificare javascript: per ignorare questo controllo. Ci sono stati un gran numero di exploit di iTunes che si basano sull'URL itunes: per sfruttare itunes dal browser. Questo è solo due esempi, ma in realtà potrebbe esserci un gestore URI registrato su un sistema di destinazione.

Eseguo questa procedura tramite una routine htmlencode per codificare tutte le virgolette e le parentesi angolari. Il vantaggio di questo è che l'URL potrebbe legittimamente contenere le virgolette senza essere danneggiato. Questo perché il browser eseguirà automaticamente una decodifica html di tutti i valori degli attributi mentre vengono caricati. Quindi applicherò che i primi 4 caratteri sono http . Se la stringa non inizia con http:// o https:// , quindi anteporre http://

    
risposta data 15.01.2013 - 17:26
fonte

Leggi altre domande sui tag