1

我正在使用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()andsetX()应该就足够了吗?

4

1 回答 1

1

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

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

于 2013-04-26T09:40:42.723 回答