5

正如我在很多文章中所读到的,当我使用 JPA/Hibernate 查询时,最好在我的查询中设置参数,这样可以避免 SQL 注入。喜欢:

select user from User user where user.name = :name and user.surname = :surname

我的问题是,在某些情况下,我需要在创建查询时使用本机查询。

我将使用我的实体管理器和createNativeQuery. 但在这种情况下,参数将是位置的。喜欢:

select * from users where user_name = ? and user_surname = ?

然后在我的查询中,我将使用该方法setParameter(1, "name")等。那么这种情况是“sql 注入证明”,就像在参数化查询中一样?

4

2 回答 2

4

如果您不使用字符串操作来构建查询,例如

"SELECT foo FROM bar Where id="+myParameter+" more sql ..."

,那么您将不会有任何漏洞。

于 2012-04-06T20:04:41.123 回答
1

目前(如果我错了,请社区纠正我)最新的 PDO 数据库抽象层中不存在漏洞。

但是,在清理和过滤输入的同时测试已知和未知的查询将有助于消除在零日漏洞攻击事件中注入的可能性。

我目前在任何和所有动态创建的查询之前使用过滤输入、字符集期望、存储过程和对其参数的严格要求的组合

于 2012-04-06T19:11:04.710 回答