1

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 注入漏洞。

4

1 回答 1

0

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

来源:SQL 注入 - OWASP


在您的代码中,如 Checkmarx 工具所示,sqlLine执行了一个 SQL 查询,完全未经检查。我们可以看到它来自某种流,但问题是这些查询的来源到底是什么。

如果流在你的完全控制之下,这意味着你确切地知道它包含什么,你可以认为它是不可利用的。这种情况的示例可以是使用硬编码查询或从定义的“白名单”中选择(或比较) - 一个已知的好/允许的查询列表。重要提示:仅当查询字符串由 100% 受信任的来源控制时,它才被视为不可利用

如果流或查询本身可以以某种方式被用户控制/更改/影响,您应该考虑不可信和不安全的查询。在这种情况下,必须采取措施防止 SQL 注入。您构建查询的方式在您的代码片段中并不清楚,因此无法在此处提出具体建议。您应该仔细阅读 OWASP SQL 注入预防备忘单中的预防方法并选择适合您的方法。

祝你好运!

于 2017-07-29T12:12:11.027 回答