2011-10-04 63 views
0

我正在使用Hibernate,並且希望阻止注入到Hibernate預準備語句中。 有沒有簡單的方法來做到這一點? 問候, 哈米德在休眠中檢測注入


讓我重新整理我的問題。 :-)我在我的代碼中有很多查詢在窗體中:session.createQuery(...)。有兩種查詢。那些有setParameters和那些誰沒有。後者的格式如下:select * from XYZ where username ='「+ username +」'and password ='「+ password +」'「這不適合我。現在,我的問題是如何自動找到第二個表單。難道我有什麼解決辦法嗎?

+0

Hibernate只使用預處理語句。你爲什麼在乎? –

+0

是的,但某些查詢仍然容易受到注入攻擊。我想檢測那些。 –

+0

所以,這個問題是不準確的。您對Hibernate中的Prepared Statements不感興趣。你想停止SQL注入。 – atrain

回答

0

如果你記錄到DEBUG,你可以看到Hibernate的在做什麼。這將表示它與預處理語句,包括當它重新使用他們在做陳述。

+0

謝謝Aaron,但我的意思並不是這樣 我想在運行時檢查它們,而不是日誌級別 你能幫助我嗎? –

+0

不確定你爲什麼要這樣做,但是如果你在Eclipse中本地運行你的應用程序並且附加了Hibernate源代碼,你可以在Debug透視圖中查看代碼,看看它在哪裏抓取Prepared Statements。如果你正在尋找對於編程方式來做到這一點,我得到了nuthin – atrain

+0

我想過濾這樣的查詢: 「select * from XY Z其中用戶名='「+用戶名+」'和密碼='「+密碼+」'「。你知道我的意思? –

0

你會需要你的日誌記錄(見@Aaron Sheffey的),打開顯示SQL。下面是設置該屬性。

hibernate.show_sql=true 

看到這裏對T的詳細信息他可以這樣做:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-logging

以下log4j屬性也會將Hibernate語句放入它們自己的文件中。

log4j.logger.org.hibernate=DEBUG, org.hibernate 

log4j.appender.org.hibernate=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.org.hibernate.DatePattern=-yyyy-MM-dd-HH 
log4j.appender.org.hibernate.File=${catalina.base}/logs/hibernate.log 
log4j.appender.org.hibernate.layout=org.apache.log4j.PatternLayout 
log4j.appender.org.hibernate.layout.ConversionPattern=%d{dd MMM yyyy HH\:mm\:ss,SSS} [%t] %-5p %c %x - %m%n 
+0

我對Aaron發表了評論,然後我決定把它放在這裏。謝謝詹姆斯,但日誌文件不幫助我。我希望檢查在運行時發生,這樣我就可以在代碼中檢測和處理這些查詢。你能以這種方式給我一個提示嗎? –

+0

不,我會猶豫做這種操作。如果如上所述,您擔心SQL注入,我建議您確保在Hibernate接近任何地方之前正確地轉義您的參數。 –