java中动态创建的order by子句在Veracode扫描中显示为sql注入问题

Posted

技术标签:

【中文标题】java中动态创建的order by子句在Veracode扫描中显示为sql注入问题【英文标题】:Dynamically created order by clause in java showing as sql injection issue in Vercode scan 【发布时间】:2019-05-25 07:30:03 【问题描述】:

我目前正在按照 veracode 标准重构现有代码。我有一段代码,其中 Order By 子句是根据用户输入动态创建的。在 veracode 中建议使用命名参数,但这是不可能的。下面是代码库。请帮助解决可能的问题。

orderClauses.append("ORDER BY ");
orderClauses.append(report.getSortColumn1()));
orderClauses.append(" ");
orderClauses.append(report.getSortOrder1());

【问题讨论】:

好吧,不要将用户提交的值附加到您的查询中。将用户输入用作已知有效值映射的键,并将这些已知有效值附加到您的查询中。 @JBNizet 不适合我。它仍然显示为veracode中的sql注入问题。 然后该工具通过向您显示潜在问题来完成其工作,现在您已经解决了实际问题,它会向您显示误报。所以忽略这个误报。它只是一个工具 【参考方案1】:

改变

orderClauses.append(report.getSortColumn1()));

类似

...
Set<String> columnsSet; 
// fill columnsSet for your query
...
String col = report.getSortColumn1();
col = columnsSet.has(col) ? col : "";
...
orderClauses.append(col);
...
//etc

或者为带有反射、注释等的报告编写很酷的类。

【讨论】:

以上是关于java中动态创建的order by子句在Veracode扫描中显示为sql注入问题的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver 创建视图失败,原因:ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效

优化 sum() over(order by...) 子句抛出“超出资源”错误

我们如何在具有GROUP BY子句的查询中选择非聚合列,而GROUP BY子句在功能上不依赖于GROUP BY子句中的列?

ORDER BY 子句中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中

在连接中使用 Where 子句,以及 Group by 和 Order By

子查询中不允许用order by子句,那么应该怎么办?