关键是您需要将HTML特殊字符转换为HTML实体.这也称为"HTML转义"或"XML转义".基本上,字符<
,>
,"
,&
和'
需要被替换<
,>
,"
,&
和'
.
URL编码不会这样做.URL编码将URL特殊字符转换为百分比编码值.这不是HTML转义.
对于Web应用程序,HTML转义通常在视图侧完成,正好在那里您重新显示用户控制的输入.对于Java EE Web应用程序,这取决于您正在使用的视图技术.
如果webapp使用现代Facelets视图技术,那么您不需要自己转义它.Facelets已经暗中这样做了.
如果webapp使用的是旧版JSP视图技术,那么您需要确保使用JSTL <c:out>
标记或fn:escapeXml()
函数重新显示用户控制的输入.
<c:out value="${bean.foo}" />
<input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />
Run Code Online (Sandbox Code Playgroud)如果webapp是非常遗留或设计不好并使用servlet或scriptlet来打印HTML,那么你就会遇到更大的问题.没有内置标记或函数,更不用说可以转义HTML实体的Java方法了.您应该escape()
自己编写一些方法,或者使用Apache Commons Lang StringEscapeUtils#escapeHtml()
.然后,您需要确保在打印用户控制的输入的任何地方使用它.
out.print("<p>" + StringEscapeUtils.escapeHtml(request.getParameter("foo")) + "</p>");
Run Code Online (Sandbox Code Playgroud)
更好的方法是重新设计遗留的webapp以将JSP与JSTL结合使用.
归档时间: |
|
查看次数: |
4392 次 |
最近记录: |