Esportazione di quadro HTML per impedire XSS

Ho qualche input da parte dell’utente. All’interno del mio codice mi assicuro che le seguenti voci siano sfuggite:

& -> &  < > -> > 

A OWASP ho letto che ci sono più caratteri da scappare.

Per gli attributi faccio un altro tipo di fuga:

 & -> & " -> " 

È garantito che tutti gli attributi siano racchiusi tra “. Questo mi rende sicuro dei miei attributi html, ma non di HTML stesso.

Mi chiedo se la mia fuga sia sufficiente. Ho letto questo post , ma non sono ancora sicuro della mia preoccupazione.

(I JavaScript sono sfuggiti con la libreria OWASP)

Uso anche la libreria OWASP ( ESAPI ), per evitare stringhe per diversi tipi di display, utilizzare:

 String html = ESAPI.encoder().encodeForHTML("hello < how > are 'you'"); String html_attr = ESAPI.encoder().encodeForHTMLAttribute("hello < how > are 'you'"); String js = ESAPI.encoder().encodeForJavaScript("hello < how > are 'you'"); 

HTML (supponiamo jsp)

 <%= html %> 

Aggiornamento ( 2017 )

Dato che gli Encoder ESAPI sono considerati legacy , è stata creata un’alternativa migliore che viene mantenuta triggersmente, pertanto consigliamo vivamente di utilizzare OWASP Java Encoder .

Se il tuo progetto utilizza già ESAPI , è stata aggiunta un’integrazione che ti permetterà invece di usare questa libreria per la codifica.

L’utilizzo è spiegato sulla loro pagina wiki , ma per completezza, questo è il modo in cui puoi usarlo per codificare contestualmente i tuoi dati:

 // HTML Context String html = Encoder.forHtml("ute'd'"); // HTML Attribute Context String htmlAttr = Encoder.forHtmlAttribute("ute'd'"); // Javascript Attribute Context String jsAttr = Encoder.forJavaScriptAttribute("ute'd'"); 

HTML (supponiamo jsp)

 
<%= html %>

PS: esistono più contesti e sono supportati dalla libreria

Ti consiglio di usare la libreria Lang di Appache Common per evitare le stringhe, affinché exmaple sfugga al codice HTML:

 String escapedString = org.apache.commons.lang.StringEscapeUtils.escapeHtml(String str); 

la libreria ha molti metodi utili per scappare in HTML, XML, Javascript.