XSS跨站脚本攻击 - Jsp <Input>标签

4
以下代码位于我的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>

在渗透测试中,他们通过在标签的值属性中注入警报脚本,向用户发送了一条随机消息。

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

这里的问题是什么,应该如何解决?
我在阅读一些关于XSS的在线参考资料时,仍然不确定可能存在的问题。
非常感谢任何帮助。
谢谢, Deena
4个回答

6
我使用了以下解决方案,
在value属性中的scriptlet是问题所在,我用jstl标签替换它。据我所知,jstl标签具有内置的转义机制,以避免XSS问题。
<input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="<c:out value=${rptBean.acctId}"/>"/>

这对我的问题很有效。

谢谢。


2
看起来渗透测试人员能够操纵他们的会话,使得rptBean.getAcctId()返回任意字符串。如果他们能够注入引号和右括号,则可以“强制关闭”input标签并插入自己的script标签。
似乎渗透测试人员得到了方法,以返回字符串1"><script>alert(12345)</script>。
这表明在写入页面时需要转义数据。我建议查看在jsp中转义HTML的答案。
此外,请记住,代码不必为了浏览器正确呈现而“完美”格式化。以下是一些关于攻击者可能尝试规避XSS过滤器的链接: 始终将用户数据视为“危险的”,在呈现它时要小心。

1

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接