查找安全漏洞 - 真正的SQL注入还是误报?

时间:2013-04-26 09:33:22

标签: java hibernate security sql-injection find-sec-bugs

我正在使用FindBug以及插件Find Security Bugs来帮助我找到代码中的安全漏洞。我不确定为什么有些代码被标记为易受SQL注入攻击。

以下是两个例子:

final StringBuilder queryString = new StringBuilder("SELECT users.login FROM Users users, Table table WHERE users.idUser = table.users.idUser");
Query query = session.createQuery(queryString.toString()); // This line is flagged


StringBuilder queryString = new StringBuilder("SELECT data FROM Table ");
queryString.append("WHERE table.idEntreprise = :id");
Query query = session.createQuery(queryString.toString()).setInteger("id", id); // This line is flagged

是假阳性还是错过了什么?如果我理解正确,请使用createQuery()setX()就够了?

1 个答案:

答案 0 :(得分:1)

这是误报。命名查询参数由Hibernate转义,因此不能执行SQL注入。

即使没有命名参数的第一个查询也是安全的,因为它不使用users.idUser参数的外部输入。