URLEncode contro HTMLEncode per la prevenzione XSS

6

Ho un progetto (in Java) che il programmatore ha utilizzato URLEncode per l'output del contenuto come parte di HTML invece di HTMLEncode.

Qual è il rischio che sia vulnerabile all'XSS? (Dimentichiamo che è una codifica diversa e otterrà risultati diversi)

Qual è il modo giusto per fare HTMLEncode in Java?

    
posta AaronS 14.11.2011 - 09:24
fonte

1 risposta

9

Valutazione del rischio. Se i dati URLEncoded vengono inseriti nel contesto HTML (ad es. tra tag), non conosco alcun modo per introdurre un attacco XSS. URLEncode sfuggirà al < , > e & caratteri (a %3C , %3E e %26 , rispettivamente). Nei browser moderni, ritengo che questo sia sufficiente per prevenire l'XSS per i valori inseriti tra i tag.

Ci sono alcuni casi più oscuri in cui gli attacchi potrebbero essere possibili. Se stai introducendo dati non attendibili (ma URLEncoded) in altri contesti di analisi, come un URL (ad esempio, l'attributo HREF del tag A), in Javascript o in CSS, allora è possibile che gli attacchi XSS siano ancora possibili nonostante l'uso di URLEncode. Tuttavia, questi contesti sono meno comuni, quindi sospetto che non siano ciò di cui stai parlando.

Quindi, in breve, è improbabile che questo sia vulnerabile a XSS (per quanto posso vedere).

Perché non dovresti farlo. Ciononostante, come penso tu riconosca, URLEncode è chiaramente la soluzione sbagliata per questo problema. Sfugge i dati nel modo sbagliato e causerà la perdita di dati quando l'utente li visualizza nel browser. Non utilizzare URLEncode; è lo strumento sbagliato per il lavoro. Utilizzare invece la funzione di escape appropriata per il contesto HTML che si intende utilizzare.

Come farlo correttamente. Vedi la mia discussione altrove su come selezionare la corretta funzione di escape e dove ottenere un'implementazione di tale funzione di escape. Ad esempio, OWASP ESAPI è una raffinata libreria piena di funzioni di escape HTML che possono essere utilizzate per prevenire le vulnerabilità XSS.

    
risposta data 14.11.2011 - 11:35
fonte

Leggi altre domande sui tag