Verrà eseguito JavaScript che si trova in un HREF?

2

Ho riscontrato un problema con un sito in cui posso inserire un tag script nel href di un tag anchor :

<a href="<script>alert(8007)</script>">Click Me</a>

Quello che sto cercando di determinare è, qual è la possibilità che un browser, anche uno più vecchio, esegua questo JavaScript collocato con l'HREF?

Capisco che questo valore deve essere codificato prima di essere scritto sulla pagina, ecc. Questa domanda riguarda strettamente il livello di minaccia dell'istruzione di cui sopra e la possibilità che un browser esegua il JavaScript durante la creazione della pagina.

Sto trovando più difficile testare le vulnerabilità di xss ora che i browser stanno facendo un lavoro migliore di rilevamento e protezione nei loro confronti.

    
posta Brettski 21.02.2012 - 18:58
fonte

1 risposta

6

Non conosco nessun browser che eseguirà Javascript per l'esempio che menzioni. Ritengo altamente improbabile che qualsiasi browser esegua Javascript in questa situazione. Questo non è correlato alle nuove protezioni nei browser moderni.

Tuttavia , sospetto che tu sia ancora vulnerabile. Se un utente malintenzionato può inserire markup in un attributo href, probabilmente significa che può inserire tutto ciò che desidera. E se un utente malintenzionato può inserire ciò che vuole, allora accadono cose brutte. Ad esempio, l'attaccante può farlo apparire come questo:

<a href="javascript:alert(8007)">Click me</a>

E che è una cattiva notizia, perché i browser eseguiranno Javascript in quella situazione. Quindi questo è un modo in cui un utente malintenzionato potrebbe tentare di sfruttare la vulnerabilità XSS.

Inoltre, se non ci sono quotazioni attorno al valore del parametro href, ci saranno altri modi per attaccare il tuo sistema. Ad esempio, <a href=blah onclick=alert(8007)>Click me</a> è una cattiva notizia e eseguirà Javascript. (Grazie a @AviD per averlo indicato.) Anche se ci sono sono quotate attorno al valore del parametro href, se l'attaccante controlla completamente il valore posto lì, l'attaccante può essere in grado di fornire il suo proprie virgolette per uscire dall'attributo e quindi causare problemi, come questo: <a href="blah" onclick=alert(8007) ignoreme="blah">Click me</a> . (Qui l'attaccante ha inserito il valore blah" onclick=alert(8007) ignoreme="blah .) Probabilmente ci sono più esempi come questo.

La linea di fondo. Consiglio vivamente di correggere la vulnerabilità XSS. Sospetto che tu sia a rischio. I cattivi hanno sviluppato un gran numero di modi sorprendenti e intelligenti di sfruttare le vulnerabilità XSS di cui non ci si può aspettare che sappiano; di conseguenza, se hai una vulnerabilità XSS, la soluzione migliore è risolverla preventivamente e non correre rischi.

Correzione del difetto. Per correggere il problema, ti consiglio di utilizzare una combinazione di convalida e uscita di escape. Innanzitutto, assicurati che il gestore del protocollo dell'URL sia uno dei set autorizzati (ad esempio http , https , ftp , mailto ). Quindi, applica l'escape HTML per sfuggire a tutte le parentesi angolari, virgolette e e commerciali prima di inserire l'URL nel markup e assicurati che il valore dell'attributo sia circondato da virgolette.

Il modo esatto per implementare questa correzione dipende dalla lingua, ma in questa situazione puoi trovare molte informazioni sul Web su come evitare i difetti XSS. Ad esempio, dopo aver verificato che il valore dinamico contenga un protocollo sicuro, in PHP puoi usare htmlspecialchars(., ENT_QUOTES) per sfuggire a parentesi angolari, virgolette e e commerciali. Oppure puoi utilizzare OWASP ESAPI , che fornisce supporto per esattamente questa situazione .

Per ulteriori informazioni, posso raccomandare una buona introduzione per gli sviluppatori web . Questa è solo un'introduzione e dovrai leggerne altre, ma ti aiuterà a essere consapevole delle minacce ad alto livello. OWASP ha alcune buone risorse per la difesa contro XSS; ad esempio, hanno un utile cheatsheet su come utilizzare OWASP ESPI per evitare le vulnerabilità XSS .

    
risposta data 21.02.2012 - 19:43
fonte

Leggi altre domande sui tag