2012-04-06 63 views
5

正如我在很多文章中讀到的,當我使用JPA/Hibernate查詢時,在我的查詢中設置參數是很好的,所以可以避免SQL注入。像:JPA查詢 - 位置參數sql注入jpa本地查詢

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注入證據」?

+1

是的,使用setParameter方法時,它將正確地轉義參數,以便它僅用作數據。使用用戶提供的參數自己構建字符串時出現注入漏洞,並且不能正確地轉義。 – kevingallagher 2012-04-06 19:33:52

回答

4

,如果你不使用字符串操作建立您的查詢像

它們的參數,過濾輸入,字符集的期待,存儲過程和嚴格要求的組合
"SELECT foo FROM bar Where id="+myParameter+" more sql ..." 

,那麼你將不會有任何漏洞。

1

目前(社區糾正我,如果我錯了)最新的PDO數據庫抽象層中不存在任何漏洞。

但是,在消毒和過濾輸入時測試已知和未知的查詢將有助於消除在零日漏洞事件中注入的可能性。

我目前使用在之前的任何和所有動態創建的查詢