Checkmarx将代码强调为sqlinjection漏洞

时间:2017-07-26 09:07:50

标签: java security sql-injection checkmarx

Checkmarx将以下代码段表示为sql注入漏洞。

在checkmarx报告中描述了下面的代码片段,如下所示

  

“从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友好的方式。之后的复选标记不应该突出显示为高sql注入漏洞的代码片段。

1 个答案:

答案 0 :(得分:0)

  

SQL注入攻击包括插入或注入"通过从客户端到应用程序的输入数据进行SQL查询。

来源:SQL Injection - OWASP

在代码中,如Checkmarx工具所示,执行SQL查询sqlLine,完全取消选中。我们可以看到它来自某种流,但问题是这些查询的来源究竟是什么。

如果流完全由您控制,这意味着您确切知道它包含的内容,您可以认为它不可利用。此类案例的示例可以是使用硬编码查询,也可以选择(或比较)已定义的白名单" - 已知的好/允许的查询列表。 重要提示:仅当查询字符串由100%受信任的来源控制时才会被视为无法利用

如果流或查询本身可以以某种方式被用户控制/更改/影响,您应该认为查询不受信任且不安全。在这种情况下,必须采取防止SQL注入的步骤。您的代码段中不清楚构建查询的方式,因此无法在此处建议特定的建议。您应该仔细检查OWASP SQL Injection Prevention Cheat Sheet中的预防方法,并为您选择合适的方法。

祝你好运!