2017-04-07 108 views
1

這可能是一個愚蠢的問題,但我沒有看到文檔中的任何內容明確指出標準查詢是參數化的還是在引擎蓋下注入保護的。Java/Hibernate標準查詢API是否防止注入?

換句話說,是否像下面的謂詞直接容易受到注入攻擊?如果是這樣,我該如何解決它?環顧文檔我沒有看到任何參數化或類似的選項。

criteriaBuilder.like(
    root.get("prop"), 
    "%"+userInput+"%" 
) 
+0

你爲什麼在乎它是否參數化?你所關心的是是否存在注入漏洞。 – immibis

+0

當然,夠公平的。我只是這麼說,因爲參數化是首先想到的提供體面防禦注入的一致方式,並且它將與API的結構保持一致。但是你是對的,他們的實現細節與結果並不直接相關,也沒有直接詢問的意義。我會重寫我的問題。 –

+0

我會假設任何*優質*庫不允許SQL注入攻擊,除非另有說明。但是,請注意,這僅適用於*優質*庫。 Hibernate對我來說看起來很像,但我從來沒有用過它。 – immibis

回答

0

是,Hibernate使用參數化查詢的標準*

證實了這一點最簡單的方法,就是要激活SQL日誌(設置org.hibernate.SQL類別DEBUG),你會看到hibernate產生的查詢(並獲取參數值,激活日誌類別:org.hibernate.type爲TRACE級別)。

*您可以手動編寫sql部分(使用Restrictions.sqlRestriction("..."))。如果您正在編寫容易進行sql注入的sql,那麼您的標準查詢也會受到它的影響。

0

是的。

使用Criteria API與使用參數化PreparedStatements相同。唯一需要謹慎的事情不是連接查詢字符串,或者是否真的需要非常小心。