SQL注入攻击

在页面中输入账号和密码时,密码的设置为'or '1'='1时,在进入后端服务器对数据库中的人员信息进行查询时,组成的查询语句为:

select * from hhuser where nick='zhangsan' and passwords=' ' or '1' = '1',该语句无论用户名和密码是啥都可以查到满足‘1’=‘1’的条件,是查询的用户列表不为空。还可以利用SQL攻击对数据造成不可挽回的灾难。如在密码后面加上';drop table aaa,就会对数据表进行删除。

SQL注入防范

  1、使用预编译语句。

  可以使用预编译语句PreparedStatement进行数据查询,通过Statement对象执行SQL语句,需要将SQL语句发送给DBMS,有DBMS编译后再执行。预编译实例:

  String sql = “select * from hhuser where nick = ? and passwords = ?”;

  PreparedStatement st = conn.prepareStatement(sql);

  st.setString(1,nickname);

  st.setString(2,password);

  ResultSet rs = st.executeQuery();

  2、使用ORM框架

  使用IBATIS、Hibernate等框架,因为这些框架对关键字或者特殊字符进行转移。

  3、避免免密码明文存放。

  4、处理好响应的异常。