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

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

我使用 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/

相关文章:

Java 继承 : Validating Subclass Type at Compile Time

java - 在 Lucene 4 索引中获取术语计数

java - Android Fragment 回按

java - Spring Boot 与两个 MySQL 数据库的连接

security - 有没有办法让HTTP请求头不可变?

java - 谷歌日历、共享、用户识别

java - 将数据添加到数据库(相关表)Spring Boot

java - HikariPool-1 - 驱动程序不支持获取/设置连接的网络超时。 (com.mysql.jdbc.JDBC4Connection.getNetworkTimeout()I)

postgresql - 将 byte[] PBEKeySpec 存储到 openshift 齿轮表现不同?

security - 盐如何防止字典攻击?