正如我在很多文章中读到的那样,当我使用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注入证明”就像在参数化查询中一样?
答案 0 :(得分:4)
如果您不使用字符串操作来构建查询,例如
"SELECT foo FROM bar Where id="+myParameter+" more sql ..."
,那么你就不会有任何漏洞。
答案 1 :(得分:1)
目前(社区纠正我,如果我错了)最新的PDO数据库抽象层中不存在任何漏洞。
然而,在清理和过滤输入时测试已知和未知的查询将有助于消除在零日攻击时注入的可能性。
我目前在任何和所有动态创建的查询之前使用过滤输入,字符集期望,存储过程和对其参数的严格要求的组合