2017-07-26 304 views
0

Checkmarx将以下代码段指示为sql注入漏洞。Checkmarx突出显示代码为sqlinjection漏洞

在checkmarx报告descibe下面的代码片断如下所示

“从的readLine元素获得的用户输入。该元素的值然后 流经代码没有被正确过滤或验证 这可以使SQL注入攻击“

为简洁起见,我还未包含全文。

InputStreamReader isr = null; 
    BufferedReader br = null; 
        try{      
         ClassPathResource defaultReports = new ClassPathResource(dbVendor + "/sql_inserts.sql"); 

         isr = new InputStreamReader(defaultReports.getInputStream()); 
         br = new BufferedReader(isr); 

         c = session.connection(); 
         String sqlLine = null; 
         while((sqlLine = br.readLine()) != null) { 
          sqlLine = sqlLine.trim(); 
           Statement st = null; 
           try{ 
            st = c.createStatement(); 
            st.execute(sqlLine); 
           }catch(SQLException e){ 

           }catch(Exception e){ 

           }finally{ 
            if (st != null) 
             st.close(); 
           } 
          } 
         } 

//sql_inserts.sql文件包含设置插入语句

我想上面的代码转换为checkmarx友好way.After认为勾选不应该强调的代码片段高达SQL注入漏洞的。

回答

0

SQL注入攻击包括通过输入数据从客户端向应用程序插入或“注入”SQL查询。

来源:SQL Injection - OWASP


在你的代码,如由Checkmarx工具,SQL查询sqlLine执行,完全听之任之。我们可以看到它来自某种类型的流,但问题是这些查询的来源究竟是什么。

如果数据流处于完全控制之下,这意味着您确切知道它包含的内容,可以认为它不可利用。这种情况的例子可以是使用硬编码查询或从已定义的“白名单”(已知的好/允许的查询列表)中进行选择(或比较)。 重要:只有在查询字符串100%可信来源控制,它可以被认为是不可利用

如果流还是自己能以某种方式被控制/改变/受影响的用户,你应该考虑的查询查询不可信和不安全。在这种情况下,必须采取措施防止SQL注入。您的代码片段不清楚您构建查询的方式,因此无法在此处建议具体的建议。您应该仔细检查OWASP SQL Injection Prevention Cheat Sheet中的预防方法,并为您选择合适的预防方法。

祝你好运!

+0

根据发布的代码,“这些查询的来源究竟是什么” - 类路径。 – Trejkaz