通常的做法是在 JSP 中重新播放期间对任何用户控制的数据进行 HTML 转义,而不是在处理 servlet 中提交的数据期间或在 DB 中存储期间。在JSP中,您可以使用JSTL(要安装它,只需将jstl-1.2.jar放入)<c:out>
标签或fn:escapeXml
函数。例如:/WEB-INF/lib
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<p>Welcome <c:out value="${user.name}" /></p>
和
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
...
<input name="username" value="${fn:escapeXml(param.username)}">
就是这样。无需黑名单。请注意,用户控制的数据涵盖了HTTP请求传入的所有内容:请求参数,正文和标头(!!)。
如果您在处理提交的数据和/或存储在数据库中时对其进行了HTML转义,那么它都会分散在业务代码和/或数据库中。这只是维护问题,当您在不同的地方这样做时,您将面临双重逃逸或更多的风险(例如 将变成而不是最终用户从字面上看到而不是在视图中。业务代码和数据库反过来又对 XSS 不敏感。只有风景是。然后,您应该只在视图中逃离它。&
&amp;
&
&
&
另请参阅: