我在JSP中顯示的字符串是這樣的:逃生所有字符串在JSP/Spring MVC的
${someString}
此字符串可以,當然,包含特殊HTML字符。目前有可能HTML注入惡意代碼(例如,如果someString是一個JavaScript包含 - <script src...>
)。
如何確保在打印之前所有字符串都被轉義了?
我正在使用Spring MVC和JSP。
我在JSP中顯示的字符串是這樣的:逃生所有字符串在JSP/Spring MVC的
${someString}
此字符串可以,當然,包含特殊HTML字符。目前有可能HTML注入惡意代碼(例如,如果someString是一個JavaScript包含 - <script src...>
)。
如何確保在打印之前所有字符串都被轉義了?
我正在使用Spring MVC和JSP。
您可以使用JSTL core:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用<c:out value="${someString}"/>
標籤顯示的字符串。 <c:out>
轉義HTML字符以避免跨站點腳本,您可以通過設置屬性escapeXml=true
來指定。另一個優點是,如果value
評估爲null
,您也可以提供默認值。您可以使用fn:escapeXml()
EL功能。你需要包括JSTL functions。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
另一種可能的方式,將建立自定義ELResolver。
爲EL表達式評估啓用自定義變量和屬性解析行爲。
This blog提供了一個如何完成的工作示例。
對於整個Spring MVC的應用程序,你可以指定web.xml中退讓:
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
但隨後的轉義僅適用於spring
標記,如:
<form:input path="formField" htmlEscape="true" />
最後,您可以嘗試第三方庫XSSFilter。
這很好,但我不得不掃描我的JSP中的所有輸出。此外,一個新人可能不知道這是正確的方式。任何自動/全局解決方案? –
@JoshuaMN更新了答案! – NINCOMPOOP
我試圖在窗體上設置'htmlEscape =「true」',但它不會轉義腳本標記,爲什麼? –
在JSP/Java控制在頁面級的這種行爲,您應使用此代碼:
在JSP/HTML:
<c:out value="TR tag </tr> Script Tag <script>alert("hello Rahul")</script>" escapeXml="true" />
自定義ELResolver是最好的解決方案! – Alex78191
是U想要執行的標籤或刪除標籤? – newuser
可能的重複:http://stackoverflow.com/questions/4948532/where-should-i-escape-html-strings-jsp-page-or-servlets –
@newuser我想逃避它,所以用戶看到'腳本「作爲頁面中的文本。 –