Fortify 扫描失败,原因数据用于动态构造 SQL 查询

Fortify scan getting failed with reason data is used to dynamically construct a SQL query

提问人:Karthika 提问时间:6/30/2023 最后编辑:Karthika 更新时间:7/3/2023 访问量:141

问:

我的一些 java 类的 Fortify 扫描失败,原因为数据用于动态构造 SQL 查询。从消息中我可以理解这与 SQL 注入有关,在我附加带有 + 运算符的 sql 之前,现在将其更改为 stringbuilder,但 fortify 仍然在分析报告中显示 sql 注入。

这是我的代码示例

public int prepareSql(String queryType){
....
StringBuilder stringBuilder = new StringBuilder("Select username, password from loginDetails where "
if (queryType="id")
stringBuilder .append("id = 123")
else
stringBuilder .append("name = 'test'")

String selectQuery = stringBuilder.toString();
Connection connection = ***;
             PreparedStatement statement = connection.prepareStatement(selectQuery);
 /**scan failed on this line **/   ResultSet resultSet = statement.executeQuery(){
while (resultSet.next()) {
......
}
}
java jdbc SQL 注入 Fortify

评论


答:

0赞 aled 7/1/2023 #1

如何附加没有区别,从安全角度来看也是一样的。不要将字符串追加到查询中。请改用不同的查询。使用预准备语句来设置参数,而不是串联。