3

我的 JSP 中的以下代码导致输入标记上的跨站点脚本漏洞。

<form name="acctFrm" method="post" action="<%=contextPath%>/form/acctSummary?rpt_nm=FIMM_ACCT_SUMM_RPT">
<table>
 <tr>
  <td>Account Id:</td>
  <td>
   <input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="<%=rptBean.getAcctId()%>"/>
   <a href="javascript:doAcctSubmit()"><img class="tbl1" src="<%=contextPath%>/img/Submit.gif" border="0" /></a>
  </td>
 </tr>
</table>
</form>

在渗透测试期间,他们能够通过在标签的 value 属性中注入警报脚本来向用户发出一些随机消息,如下所示

<input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="1"><script>alert(12345)</script>" />

这里有什么问题,解决方法是什么。

我正在阅读一些关于 XSS 的在线参考资料,但我仍然不能 100% 确定可能是什么问题。

任何帮助将不胜感激。

谢谢,迪娜

4

4 回答 4

6

我使用了以下解决方案,

value 属性中的 scriplet 是问题,我用 jstl 标签替换了它,我在某处读到 jstl 标签具有内置转义机制以避免 xss 问题。

<input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="<c:out value=${rptBean.acctId}"/>"/>

这对我的问题很有用。

谢谢

于 2012-08-14T18:06:45.347 回答
2

似乎渗透测试人员能够操纵他们的会话,以便 rptBean.getAcctId() 返回任意字符串。如果他们可以注入引号和右括号,他们可以“强制关闭”input标签并插入他们自己的script标签。

看起来渗透测试人员得到了返回字符串的方法1"><script>alert(12345)</script>

这表明您在写入页面时需要对数据进行转义。我建议看一下关于在 jsp 中转义 HTML的答案。

另外,请记住,代码不必“完美”格式化,浏览器也可以“正确”呈现它。以下是一些关于攻击者如何尝试规避 XSS 过滤器的链接:

始终将用户数据视为“危险的”,并在页面上呈现它时要小心。

于 2012-08-13T19:33:56.960 回答
1

似乎在值属性中使用jstl标签<c:out value="">会导致jstl <form options>标签错误,

更多信息 JSP/Servlet Web 应用程序中的 XSS 预防

于 2016-07-20T05:51:09.723 回答
0

如果getAcctId()返回的数据来自数据库,您可以在发送给客户端之前进行过滤。例如检查是数据应该是一个数字。

于 2012-10-02T20:10:43.447 回答