提问人:DodgyCodeException 提问时间:11/29/2022 更新时间:11/30/2022 访问量:524
SonarQube 误报 SQL 注入
SonarQube false positive SQL injection
问:
我有一个查询,其确切值取决于几个输入参数。它看起来有点像这样:
final String otherColumns = includeExtras ? ", baz" : "";
final String otherRestriction = name.equals("fred") ? " and bar = baz" : "";
PreparedStatement stmt = conn.prepareStatement(
"select foo, bar" + otherColumns + "from t where x = y" + otherRestriction);
SonarQube 报告说,这容易受到 SQL 注入的影响,但实际上很明显,所有“注入”都来自源代码,而不是直接来自参数,因此不存在漏洞。
是否有标志或设置可以让 SonarQube 花费更多时间进行数据流分析,以便它可以看到这里没有漏洞?
答:
1赞
Djordje Nedovic
11/29/2022
#1
引发 SQL 注入规则是因为未使用参数化查询。
评论
2赞
DodgyCodeException
11/29/2022
谢谢,但这行不通,因为如果没有其他列,则无效的 SQL 语法。此外,otherRestriction 的参数占位符会使语句无效。SQL 参数化语句不能在任何地方使用“?”。它们只能进入某些地方,即值会去的地方。它们不能用于添加关键字(这是包含的内容)。select foo, bar, from t
otherRestrictions
0赞
Djordje Nedovic
11/30/2022
嗨,@DodgyCodeException,感谢您的评论。你是对的,我上面的解决方案并不完全正确。在这种情况下,解决方案是使用大量 if-else 块。如果你愿意,我可以在今天晚些时候更新答案。
0赞
DodgyCodeException
11/30/2022
没关系,我知道有很多 if-else 块会是什么样子。我的主要疑问是是否可以让 SonarQube 理解没有威胁,这样我就可以避免在代码中出现大量 if-else 块。无论如何,感谢您的回答。
1赞
Djordje Nedovic
11/30/2022
@DodgyCodeException完美,我将删除代码,这样就不会混淆任何人。
评论
final String