问题:
最近在复习JAVAEE,做邮件管理系统的项目时候遇到了一个问题:
如果用户发送邮件的内容包含HTML标签,接收到邮件的一方页面样式就会发生改变.
此处说明HTML标签被解析了,让我们看看出现问题的代码
<div class="content">
<div class="message">
<div class="tmenu">
<ul class="clearfix">
<li>标题: ${requestScope.get("title")} </li>
<li>来自:${requestScope.get("sender")}</li>
<li>时间:${requestScope.get("time")}</li>
</ul>
</div>
<div class="view">
<p>${requestScope.get("content")}</p>
</div>
</div>
解决方式:
使用taglib的function标签库: fn:escapeXml()方法
<div class="tmenu">
<ul class="clearfix">
<li>标题: ${fn:escapeXml(requestScope.get("title"))} </li>
<li>来自:${fn:escapeXml(requestScope.get("sender"))}</li>
<li>时间:${fn:escapeXml(requestScope.get("time"))}</li>
</ul>
</div>
<div class="view">
<p>${fn:escapeXml(requestScope.get("content")}</p>
</div>
或者使用JSTL标签库的<c:out>
<c:out value=“值” default=“默认值” escapeXml=“true”></c:out>
总结:
不光要知道怎么解决出现的问题,还要想到从根源上防止问题的发生,我们可以在发送邮件时就进行正则表达式的过滤,这样就从根源上杜绝了XSS注入的可能性.