用hibernate做数据库操作的底层,一般不建议使用字符串的拼接。都建议使用占位符:name或?来setParamater。这样能防止SQL注入,我看了看源码有没有处理SQL关键词这样的操作,Filet Query对象子类好像没看到有处理这些SQL关键词的地方,我也没看太懂,有点晕。
   问下大牛们,谁知道hibernate在那个类的哪个方法有处理些这个的地方还是我压根就理解错了,指点下thx。

解决方案 »

  1.   

    防止SQL注入不是防止什么关键字
    而是防止拼接SQL的时候执行其它语句或条件不是你想要的
    lz搜索下什么是SQL注入就明白了
      

  2.   

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

  3.   


    假如userId用户输入个userId=xxxx' or 'aa'='aHQL: "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的哪个类做了此操作的
      

  4.   

    参考 jdbc中的 PreparedStatement
      

  5.   

    以前看到老师讲过sql防注入。那时候真感到有点神奇,理解了才知道就是字符串拼接。ej:where id="xxor1==1";这样成了永真,那么任何人都可以登录成功。