2008-10-27 15 views
6

Ho un editor di testo avanzato sul mio sito che sto cercando di proteggere dagli attacchi XSS. Penso di avere praticamente tutto gestito, ma non sono ancora sicuro di cosa fare con le immagini. In questo momento sto utilizzando la seguente espressione regolare per convalidare gli URL di immagine, che sto assumendo bloccherà in linea javascript attacchi XSS:Scripting cross-site da un'immagine

"https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+" 

Quello che non sono sicuro di come è aperto questo mi lascia da attacchi XSS l'immagine remota. Il collegamento a un'immagine esterna rappresenta una seria minaccia per la sicurezza?

L'unica cosa che posso pensare è che l'URL inserito fa riferimento a una risorsa che restituisce "text/javascript" come tipo MIME invece di una sorta di immagine e che quindi viene eseguito javascript.

È possibile? C'è qualche altra minaccia alla sicurezza che dovrei prendere in considerazione?

+2

Consiglio anche il ha.ckers.org foglietto: ha.ckers.org/xss.html –

risposta

4

Un'altra cosa di cui preoccuparsi è che è possibile incorporare facilmente il codice PHP all'interno di un'immagine e caricarlo la maggior parte del tempo. L'unica cosa che un attacco dovrebbe essere in grado di fare è trovare un modo per includere l'immagine. (Solo il codice PHP verrà eseguito, il resto verrà solo ripetuto). Controllare il tipo MIME non ti aiuterà con questo perché l'attaccante può facilmente caricare un'immagine con i primi byte corretti, seguita da un codice PHP arbitrario. (Lo stesso è piuttosto vero per il codice HTML e Javascript).

+0

non sto consentendo agli utenti Carica immagini. Gli utenti sono autorizzati a collegarsi a immagini su altri siti per motivi quali quello che hai menzionato. –

+0

Un filtro di un semplice nome non lo impedisce? – AaronSieb

+0

@AaronSieb, no perché, ad esempio, è possibile incorporare il codice PHP in un pallet GIF e caricare un'immagine GIF perfettamente valida con il tipo di file e il tipo MIME corretti. Il problema è che, finché posso manipolare il sito Web da includere ("my_uploaded_gif.gif"), sei nei guai. Inoltre, guarda la cosa di% 00. –

1

In tal caso, osservare il contesto circostante: gli utenti forniscono solo un URL? In tal caso va bene solo convalidare la semantica degli URL e il tipo MIME. Se l'utente arriva anche a inserire tag di qualche tipo, dovrai assicurarti che non siano manipolabili per fare altro, quindi visualizzare le immagini.

2

Se il visualizzatore finale si trova in un'area protetta da password e l'app contiene URL che avviano azioni basate su richieste GET, è possibile effettuare una richiesta per conto dell'utente.

Esempi:

  • src = "http://yoursite.com/deleteuser.xxx?userid=1234"
  • src = "http://yoursite.com/user/delete/1234 "
  • src =" http://yoursite.com/dosomethingdangerous"
+0

Sarei davvero vulnerabile a questo? My Regex consente solo http/https all'inizio dell'URL, quindi JavaScript (o qualsiasi codifica di esso) non dovrebbe essere in grado di passare, o sbaglio? –

+0

Whoops, hai dimenticato l'https?: //'. Modificherò la mia risposta. –

+0

Con REST non scriviamo mai nulla con GET ... – inf3rno