请问hibernate防止SQL注入的原理是怎么样的

zengjz88 2012-04-26 10:19:53
用hibernate做数据库操作的底层,一般不建议使用字符串的拼接。都建议使用占位符:name或?来setParamater。这样能防止SQL注入,我看了看源码有没有处理SQL关键词这样的操作,Filet Query对象子类好像没看到有处理这些SQL关键词的地方,我也没看太懂,有点晕。。。。
问下大牛们,谁知道hibernate在那个类的哪个方法有处理些这个的地方还是我压根就理解错了,指点下。。。thx。
...全文
588 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
a11336699 2013-05-05
  • 打赏
  • 举报
回复
以前看到老师讲过sql防注入。那时候真感到有点神奇,理解了才知道就是字符串拼接。ej:where id="xxor1==1";这样成了永真,那么任何人都可以登录成功。
zengjz88 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

使用了预编译占位符就自动防止了SQL注入,不用额外的代码控制
[/Quote]

假如userId用户输入个userId=xxxx' or 'aa'='a

HQL: "FROM FUser WHERE userId ='"+userId+"'";这是拼接的sql
出来的是 FROM FUser WHERE userId ='xxxx' or 'aa'='aa'

HQL2:"FROM FUser WHERE userId =:userId"; 占位符的sql
hibernate转换之后出来的是否是:FROM FUser WHERE userId ='xxxx' or 'aa'='aa'吗?

能告诉我hibernate的哪个类做了此操作的

  • 打赏
  • 举报
回复
使用了预编译占位符就自动防止了SQL注入,不用额外的代码控制
  • 打赏
  • 举报
回复
防止SQL注入不是防止什么关键字
而是防止拼接SQL的时候执行其它语句或条件不是你想要的
lz搜索下什么是SQL注入就明白了
fwb3950201 2012-04-26
  • 打赏
  • 举报
回复
参考 jdbc中的 PreparedStatement

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧