我使用 FindBug
以及插件 Find Security Bugs
来帮助我查找代码中的安全缺陷。我不确定为什么某些代码被标记为容易受到 SQL 注入(inject)攻击。
这里有两个例子:
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()
应该足够了?
最佳答案
这是误报。命名查询参数会被 Hibernate 转义,因此无法执行 SQL 注入(inject)。
即使第一个没有命名参数的查询也是安全的,因为它不使用 users.idUser
参数的外部输入。
关于java - 查找安全漏洞 - 真正的 SQL 注入(inject)还是误报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16233185/