2017-07-26 305 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