2011-06-06 35 views
1

我在我的web.xml春季或APP服務器逃生的HTML工作不JAVA MVC

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

了這一點,這在JSP

<spring:htmlEscape defaultHtmlEscape="true" /> 

不過我可以把<font color="red">this is red</font>在一個表格中,並在網站上看到紅色的文字。

我正在使用EL和Taglibs訪問jsps中的變量。例如。 <h3>${someThing.title}</h3>

爲什麼這不起作用,我該怎麼辦?包裝在一些包裝每一個EL表達式醃的代碼,很容易出錯...

+0

那麼爲什麼這個工作到最後呢? – 2016-07-05 09:46:28

回答

3
<c:out value="${someThing.title}" escapeXml="true"/> 
+1

這就是我不想要的。沒有webdesigner可以使用jsps來處理那些東西......如果我忘記把它放在某個地方,那麼很容易出現XSS。我想設置一次。 – 2011-06-06 07:35:57

+0

所以也許你可以添加一個過濾器,它可以在將呼叫轉發到jsp之前轉義所有請求和會話作用域參數 – 2011-06-06 09:39:10

+0

謝謝!這對我的用例非常有用。 – 2014-07-16 23:09:39

3

你應該使用<c:out>逃脫在JSP代碼。我可以看到你可能會認爲這是臃腫的,但你可以使用標籤文件來減少重複。或者,使用EL的fn:escapeXml功能。

+0

這些其他的東西(content-param ...)是無用的嗎?如果真的很難做到每一秒都必須容易發生XSS。也許我應該考慮一個新的收入來源:-) – 2011-06-06 07:45:44

+0

是的,這是一種痛苦。請參閱http://stackoverflow.com/questions/2147958/how-do-i-prevent-people-from-doing-xss-in-java。我認爲'defaultHtmlEscape'只適用於Spring MVC JSP標記的輸出,而不適用於原始EL表達式。 – artbristol 2011-06-06 07:54:57