【问题标题】:Protecting from XSS and using c:out jsp tag防止 XSS 并使用 c:out jsp 标签
【发布时间】:2014-06-14 22:19:46
【问题描述】:

${book.description} 变量包含带有“\n”字符的文本,因此我将其替换为 html 标记以在 jsp 输出中保留新行(新段落行)。 但在这种情况下,存在执行 XSS 代码的危险。有没有办法使用 c:out jsp 标签并在文本中保留新行?如果我使用 c:out 进行输出,那么所有
都替换为 < br/>并且没有新行。

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

【问题讨论】:

  • 问题略有不同...
  • 但是解决方法是一样的。
  • 好吧,但是如果 ${book.description} 中有 XSS 代码会发生什么?
  • 你需要用 标签包装它

标签: java jsp xss


【解决方案1】:

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

看看${fn:escapeXml(text)} 转义字符串中的XML 字符。这是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

【讨论】:

  • 我认为这不是更好的解决方案。使用此选项将打开在客户端执行 XSS 代码的可能性。
  • 不,不会。 ${fn:replace(fn:escapeXml(text), "\n", "&lt;br/&gt;")} 会做你想做的事。
  • @Andy 将c:outfn:escapeXml 结合起来,例如试试&lt;c:out value="${fn:escapeXml(fn:replace(text,'\n','&lt;/br&gt;'))}"/&gt;
  • 无法解析该表达式
  • 没有这些作品?我没有测试过,直接在这里输入。您必须对如何使用 JSTL 和 EL 进行一些研究。我已经分享了一些有用的链接。你都读完了吗?
猜你喜欢
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2018-07-16
相关资源
最近更新 更多