hibernate防止sql注入

hibernate防止sql注入

ID:34723233

大小:68.18 KB

页数:3页

时间:2019-03-10

hibernate防止sql注入_第1页
hibernate防止sql注入_第2页
hibernate防止sql注入_第3页
资源描述:

《hibernate防止sql注入》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、【转】Hibernate防止SQL注入2009-05-1413:10今天读《HibernateInAction》,看到有关的SQL中可能被注入单引号的问题前阶段我做完了一个系统,如果在查询字段中输入单引号"'",则会报错,这是因为输入的单引号和其他的sql组合在一起编程了一个新的sql,实际上这就是SQL注入漏洞,后来我在前台和后台都对输入的字符进行了判断。今天看《HibernateInAction》第七章7.1.2绑定参数时发现也提到了这一点,以下是我的简短的翻译:永远也不要写这样的代码:    StringqueryString="fromItemiwherei.de

2、scriptionlike'"+searchString+"'";    Listresult=session.createQuery(queryString).list();   如果用户输入:foo'andcallSomeStoredProcedure()and'bar'='bar,则你的程序在执行一个简单查询后,还会调用某个存储过程,这样你的程序就开了一个安全漏洞,如果用户偶尔输入了一个单引号,你的程序就可能报错(我的程序就这样呀!)。    永远也不要把未经检查的用户输入的值直接传给数据库!幸运的时有一个简单的机制可以避免这种错误:JDBC在绑定参数时有一个安全机

3、制,它可以准确的将那些需要转义的字符进行转义(escape),如上面的searchString,它被escape,不再作为一个控制字符了,而是作为被查询的匹配的字符串的一部分。(这里指的是preparedstatement,而是用普通的statment不行,我试过)。另外,如果我们使用参数绑定,还可以提高数据库的执行效率,preparedstatement语句被编译一次后,被放在cache中,就不再需要编译,可以提高效率。参数绑定有2种办法:使用positionalparameter或者namedparameter。Hibernate支持JDBC样式的positional

4、parameter(查询字符串中使用?),它同使用namedparameter的效果一样(查询字符串中使用:)。使用namedparameter使用namedparameter,我们重新写上面的查询语句:StringqueryString="fromItemitemwhereitem.descriptionlike:searchString";冒号后面是一个namedparameter,我们可以使用Query接口将一个参数绑定到searchString参数上:   Listresult=session.createQuery(queryString)           

5、          .setString("searchString",searchString)                     .list();因为searchString是一个用户输入的字符串,所以我们使用Query的setString()方法进行参数绑定,这样代码更清晰,更安全,效率更好!如果有多个参数需要被帮定,我们这样处理:StringqueryString="fromItemitem"                          +"whereitem.descriptionlike:searchString"                 

6、         +"anditem.date>:minDate";Listresult=session.createQuery(queryString)                 .setString("searchString",searchString)                  .setDate("minDate",minDate)                 .list();使用positionalparameter   如果你喜欢,也可以使用positionalparameter:StringqueryString="fromItemitem

7、"                          +"whereitem.descriptionlike?"                          +"anditem.date>?";Listresult=session.createQuery(queryString)                 .setString(0,searchString)                 .setDate(1,minDate)                 .list();这段代码可读性强不如上面的强,而且可维

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。