Checkmarx 高亮代码为 sqlinjection 漏洞

Posted

技术标签:

【中文标题】Checkmarx 高亮代码为 sqlinjection 漏洞【英文标题】:Checkmarx highlight code as sqlinjection vulnerability 【发布时间】:2018-01-01 12:04:30 【问题描述】:

Checkmarx将以下代码sn-p表示为sql注入漏洞。

在 checkmarx 报告中描述如下代码 sn-p 如下所示

" 从 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友好的方式。之后,不应该将代码sn-p突出显示为高sql注入漏洞。

【问题讨论】:

【参考方案1】:

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

来源:SQL Injection - OWASP


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

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

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

祝你好运!

【讨论】:

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

以上是关于Checkmarx 高亮代码为 sqlinjection 漏洞的主要内容,如果未能解决你的问题,请参考以下文章

checkmarx使用笔记

Spring data JPA Checkmarx 漏洞-@Query 注解的资源访问授权不当

Checkmarx 反射型 XSS

checkmarx下载地址

Checkmarx VisualStudio plugin installation process.

CORS 和 CSRF 处理 checkMarx XSRF 攻击问题(spring boot 微服务)