在servlet开发中,需要构造sql语句但是这样会带来sql注入攻击问题,在.net中,可以依靠OleDbCommand对象的Parameter参数来规避这类问题
但是在java技术中,有没有相关技术可以解决的问题?还是需要依靠手写过滤注入字符?
我对框架不了解,只是知道好像hibernate属于数据库操作的框架。

解决方案 »

  1.   

    JDBC 中可以使用 PreparedStatement,如果是 Hibernate,在 Query 和 Criteria 接口中都有与 PreparedStatement 类似的参数占位功能的。
      

  2.   

    如果使用Statement
    从理论上说,认证网页中会有型如:
    select * from admin where username='XXX' and password='YYY' 的语句,若在正式运行此句之前,没有进行必要的字符过滤,则很容易实施SQL注入。
    如在用户名文本框内输入:abc' or 1=1-- 在密码框内输入:123 则SQL语句变成:
    select * from admin where username='abc' or 1=1 and password='123' 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。但是使用PreparedStatement时:
    select * from admin where username=? and password=?
    被替换成
    select * from admin where username="abc' or 1=1" and password=null
    就防止了注入式攻击,即字符串整体作为参数进行匹配