与 Veracode 将 tableName 变量标记为“SQL 注入”缺陷作斗争

问题描述 投票:0回答:1

我们有一个命令行实用程序,可以将指定的文件(CSV)加载到指定的表中。

显然,表名将由外部提供(在命令行上),Veracode 会将其标记为可能的 SQL 注入漏洞。例如,这一行被标记为:

    private static String startingCntQry =
        "select count(*) as COUNTER from @TABLENAME";
...
            ResultSet rs = stmt.executeQuery(startingCntQry.replace("@TABLENAME",
                tableName));

我在理论上理解这种担忧——但认为它在这种情况下不适用:任何能够调用此实用程序的人都已经拥有数据库凭据,并且可以“直接”造成他想要的任何损害。但我仍然需要让它消失。 表名不能作为

PreparedStatement

的参数。有人建议,应该根据

现有
表的列表检查表名,但是我们的实用程序,根据其他命令行标志,可能会创建指定的表anew——它不会出现在已经存在的列表。 是的,我们可以根据某些正则表达式检查指定的名称,但这能满足 Veracode 的要求吗?

java jdbc sql-injection veracode
1个回答
0
投票

这两种情况可能无法使用静态代码分析工具进行验证(如果您提供有限的允许表名预设并仅选择其中一个,也许您可以通过检查,但您的描述听起来这对于您的情况并不可行).

因此,这意味着,您必须记录对策并与可以确认这些对策足够的人交谈,并为静态代码分析工具的输出创建例外。由于此类工具有相当多的误报,如果您的环境需要满足某些验证级别,通常这是一个“正常”过程。

© www.soinside.com 2019 - 2024. All rights reserved.