問題:
最近在複習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注入的可能性.