当前位置: 首页 > 知识库问答 >
问题:

Checkmarx显示代码有二阶注入的风险

冯庆
2023-03-14

Checkmark扫描了我们的代码,显示这些代码有二阶注入的风险

@SuppressWarnings("unchecked")
public List<Map<String, Object>> findBySQL(String sql, List<ScalarType> types, List<Object> values, Info info) throws ApplicationException {
    try {
        SQLQuery query = currentSession().createSQLQuery(sql);
        if (types != null) {
            for (ScalarType scalar : types) {
                query.addScalar(scalar.getColumn(), scalar.getType());
            }
        }

        if (values != null) {
            for (int i = 0; i < values.size(); i++) {
                query.setParameter(i, values.get(i));
            }
        }
        query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
        return query.list();
    } catch (Exception e) {
        throw new ApplicationException(e, info);
    }
}

我们的代码使用preparedStatement来执行sql。但是为什么这些代码仍然存在风险,我该如何修复它呢?

共有2个答案

况安然
2023-03-14

为了解决Checkmarx中的问题,需要验证该sql字符串

归誉
2023-03-14

Checkmarx会抛出错误,因为您为查询参数设置的值没有针对其类型进行验证。

例如,让我们假设使用准备语句形成的查询如下所示,并且要传递给查询参数的值是'Test'

Select * from XYZ where COL1 = ?

如果您的代码被泄露,并且如果入侵者通过了查询参数中的'Test'或1=1,那么该条件将始终为真,并将返回表中的所有记录。

因此,在执行查询之前,您应该验证所有输入。

希望这有帮助

 类似资料:
  • 我有一些执行数据库操作API。每当我将代码上传到checkmarx时,我会得到以下错误,并将其标记为高漏洞错误,有人能帮助我吗? 应用程序的CreateDatabaseAndMapToDomain方法使用executeQuery执行SQL查询,位于daas-springboot-checkmarxintegration\src\main\java\com\it\daas\apis\service\

  • 5.4. 代码注入 一个特别危险的情形是当你试图使用被污染数据作为动态包含的前导部分时: <?php include "{$_GET['path']}/header.inc"; ?> 在这种情形下攻击者能操纵不只是文件名,还能控制所包含的资源。由于PHP默认不只可以包含文件,还可以包含下面的资源(由配置文件中的allow_url_fopen所控制): <?php include 'http://w

  • 在CSS3中,可以通过 appearance属性使元素呈现为标准的用户界面元素,如按钮、菜单、文本输入框、单选按钮、多选按钮、列表等等。 也就是说,使用 appearance属性,可以改变任何元素的默认风格,但所有主流浏览器都不支持它。到现在为止,只得到 Webkit 和 Gecko 两个内核的支持,但需要加上浏览器的私有前缀。如,让链接元素默认显示为按钮风格: a {     width: 1

  • 我们的代码必须尽可能的清晰和易读。 这实际上是一种编程艺术 —— 以一种正确并且人们易读的方式编码来完成一个复杂的任务。一个良好的代码风格大大有助于实现这一点。 语法 下面是一个备忘单,其中列出了一些建议的规则(详情请参阅下文): <!-- ```js function pow(x, n) { let result = 1; for (let i = 0; i < n; i++) { result

  • 代码风格 必须 严格遵循 PSR-2 规范。

  • 空白 每行不能超出99个字符。 缩进只用空格,不用TAB。 行和文件末尾不要有空白。 空格 二元运算符左右加空格,包括属性里的等号: #[deprecated = "Use `bar` instead."] fn foo(a: usize, b: usize) -> usize { a + b } 在分号和逗号后面加空格: fn foo(a: Bar); MyStruct { foo: 3