检索到的数据库数据上的脚本错误

问题描述 投票:0回答:1

我在执行更新后的语句上看到跨脚本注入错误。如何清理输出以消除交叉脚本错误。我有一个简单的代码段,它使用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返回的输出流中。

java xss veracode
1个回答
0
投票

我不知道为什么ResultSetMetaData对象正在调用servlet方法,但是如果我正确理解它,它将用于在servlet中打印某些内容。但是,由于ResultSetMetaData中的所有数据均来自数据库的元数据(可能无法包含javascript代码或其他XSS风险),因此在这种情况下应将其保存。

[ResultSetMetaData是一个常用的类(并且使用了很长时间),所以我真的不认为这在当前的Java版本中是个问题。

因此,我不知道如何解决此问题,但是我很确定这不是问题,因为不可能在数据库的元数据中添加任何恶意软件代码(javascript或sql注入代码)。 >

© www.soinside.com 2019 - 2024. All rights reserved.