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 子句中