【发布时间】:2020-02-24 16:52:27
【问题描述】:
我在执行更新后的语句中看到了跨脚本注入错误。如何清理输出以消除交叉脚本错误.. 我有一个简单的代码 sn-p,它使用 PreparedStatement 运行选择并返回在前端 GUI 屏幕上检索到的值。
XSS 漏洞消息:“受污染的数据源自之前对 java.sql.ResultSetMetaData.getColumnName 的调用。”
Java 代码:
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
try {
List alist= new ArrayList();
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
int count = rs.getMetaData().getColumnCount();
for (int i = 1; i <= count; i++) {
alist.add(rs.getMetaData().getColumnName(i)) //Flaw seems to point to this.
}
}catch(Exception e){
//close connections
}
return alist;
完整的 Veracode 缺陷: 攻击向量: javax.servlet.jsp.JspWriter.print
模块数受影响:1
描述: 对 javax.servlet.jsp.JspWriter.print() 的调用包含跨站点脚本 (XSS) 缺陷。该应用程序使用不受信任的输入填充 HTTP 响应,从而允许攻击者嵌入恶意内容,例如 Javascript 代码,这些内容将在受害者浏览器的上下文中执行。 XSS 漏洞通常被用来窃取或操纵 cookie、修改内容的呈现方式以及泄露机密信息,并且会定期发现新的攻击向量。 print() 的第一个参数包含来自变量 getHtml() 的污染数据。受污染的数据源自之前对 java.sql.ResultSetMetaData.getColumnName 的调用。被污染的数据被定向到 javax.servlet.jsp.JspWriter 返回的输出流中。
【问题讨论】:
-
你能添加一个堆栈跟踪或其他一些关于错误的信息吗?结果集的元数据上不能有任何关于 XSS 的错误。 XSS 不会有问题,因为您使用的是用于防止 XSS 的准备好的语句。所以错误必须是我认为的其他东西......
-
不幸的是,这不是错误,而是交叉脚本缺陷,因此没有堆栈跟踪。