XSS Cross Site Scripting - Jsp <input />标记

时间:2012-08-13 19:13:16

标签: xss cross-site

我的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的一些在线参考资料,但我仍然不能确定可能出现的问题。

非常感谢任何帮助。

谢谢, 蒂娜

4 个答案:

答案 0 :(得分:4)

我使用了以下解决方案,

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

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

这对我的问题很有用。

由于

答案 1 :(得分:2)

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

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

这表示您在写入页面时需要转义数据。我建议你看看escaping HTML in jsp上的答案。

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

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

答案 2 :(得分:1)

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

更多信息 XSS prevention in JSP/Servlet web application

答案 3 :(得分:0)

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