2011-10-04 58 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接近任何地方之前正确地转义您的参数。 –