保护XSS并使用c:out jsp标记

时间:2014-06-14 22:19:47

标签: java jsp xss

$ {book.description}变量包含带有" \ n"的文本。字符incide,所以我将其替换为html标记以保留jsp输出中的新行(new paragrapf行)。 但在这种情况下,存在执行XSS代码的危险。有没有办法使用c:out jsp tag和preserv new line in text?如果我使用c:out输出那么所有< br />替换为& LT; br /& GT;而且没有新线。

<c:set var="newline" value="<%= \"\n\" %>" />           
<p>${fn:replace(book.description, newline, "<br />")}</p>

1 个答案:

答案 0 :(得分:0)

您可能对JSTL Functions的其他功能感兴趣。

查看转义字符串中XML字符的${fn:escapeXml(text)}。这是Sample


看看

<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />

阅读Core Tag Library

上的更多教程

修改

解决方案1 ​​

<c:set var="newline" value="\n" />
<c:set var="text" value="abc\nlmn\nxyz" /> 
${ fn:replace(text, newline,'</br>')}

解决方案2

<c:set var="newline" value="\n" />
<c:set var="text" value="abc\nlmn\nxyz" /> 
<c:out value="${ fn:replace(text, newline,'</br>')}" escapeXml="false"/>

输出:

abc
lmn
xyz