2013-07-29 12 views
15

ho visualizzare le stringhe nel mio JSP questo modo:Fuga tutte le stringhe in JSP/Spring MVC

${someString} 

questa stringa può, naturalmente, contenere caratteri speciali html. Attualmente è possibile inserire codice dannoso in HTML (ad esempio se someString è un javascript include - <script src...>).

Come posso essere sicuro che tutte le stringhe siano sfuggite prima della stampa?

Sto utilizzando Spring MVC e JSP.

+0

Are u desidera eseguire il tag o rimuovi i tag? – newuser

+0

Possibile duplicato: http: //stackoverflow.com/questions/4948532/where-should-i-escape-html-strings-jsp-page-or-servlets –

+0

@newuser Voglio scappare, quindi l'utente vede '< script' come testo nella pagina. –

risposta

22

È possibile utilizzare JSTL core:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

Usa <c:out value="${someString}"/> tag per visualizzare le stringhe. <c:out> fugge i caratteri HTML in modo da poter evitare lo scripting cross-site, è possibile specificarlo impostando l'attributo escapeXml=true. Un altro vantaggio è che è anche possibile fornire un valore predefinito nel caso in cui lo value valuti su null.

È inoltre possibile utilizzare la funzione fn:escapeXml() EL. È necessario includere JSTL functions per quello.

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 

Un altro modo possibile, verrà creato un numero personalizzato ELResolver.

Abilita la personalizzazione del comportamento di risoluzione delle proprietà e delle variabili per la valutazione delle espressioni EL.

This blog fornisce un esempio funzionante di come può essere fatto.


Per tutta la Spring MVC app, è possibile specificare la fuga nel web.xml:

<context-param> 
    <param-name>defaultHtmlEscape</param-name> 
    <param-value>true</param-value> 
</context-param> 

Ma poi la fuga si applica solo ai spring tag, come:

<form:input path="formField" htmlEscape="true" /> 

Infine, è possibile provare la libreria di terze parti XSSFilter.

+1

questo è buono, ma dovrei scansionare tutti gli output nei miei JSP. Inoltre una nuova persona potrebbe non sapere che questo è il modo giusto.Qualunque soluzione automatica/globale? –

+0

@JoshuaMN Aggiornamento della risposta! – NINCOMPOOP

+0

Ho provato a impostare 'htmlEscape =" true "' sul mio modulo ma non sfugge al tag script, nessuna idea del perché? –

0

È inoltre possibile controllare questo comportamento a livello di pagina utilizzando <spring:htmlEscape defaultHtmlEscape="true" />

+0

Guarda la risposta di NINCOMPOOP. "Ma poi l'escape si applica solo ai tag primavera." – Alex78191

+0

Non funziona con la sintassi SpEL '$ {variabile}'. – Alex78191

0

in JSP/Java È consigliabile utilizzare questo codice:

In JSP/HTML:

<c:out value="TR tag </tr> Script Tag <script>alert("hello Rahul")</script>" escapeXml="true" /> 
+0

Custom ELResolver è la soluzione migliore! – Alex78191

Problemi correlati