php小型网站开发,网站维护 推广,如何选网站服务器,江西seo推广1.概念#xff1a;
利用sql语句的漏洞来对系统进行攻击#xff0c;导致数据泄露
2.案例演示
数据库登录表#xff1a; 模拟登录代码【输入正确的用户名和密码才能打印出用户信息】
public class SQL注入 {public static void main(String[] args) {login( or 1…1.概念
利用sql语句的漏洞来对系统进行攻击导致数据泄露
2.案例演示
数据库登录表 模拟登录代码【输入正确的用户名和密码才能打印出用户信息】
public class SQL注入 {public static void main(String[] args) {login( or 11, 123456or 11);//login(张三,123456);//select * from login where name or 11 AND password 123456or 11}//登录业务public static void login(String username,String password){Connection conn null;Statement stmt null;ResultSet rs null;try {conn JdbcUtils.getConnection();stmt conn.createStatement();String sql select * from login where nameusername AND password password;//System.out.println(sql);rs stmt.executeQuery(sql);while (rs.next()){System.out.println(rs.getString(Name));System.out.println(rs.getString(password));}} catch (SQLException e) {e.printStackTrace();}finally {JdbcUtils.close(conn,stmt,rs);}}
}
-----------------------------------------------------------------------------------
login(张三,123456);展示结果
张三
123456和login( or 11, 123456or 11);展示结果
张三
123456
李四
6543213.SQL注入漏洞的原因
使用Statement对象执行SQL时如果SQL中拼接的变量包含了SQL关键字那么就会出现SQL注入漏洞如;上面的登录案例 login( or ‘11, “123456’or 11”);传入的参数进行后台的sql拼接时就会变成select * from login where name’ or ‘11’ AND password 123456’or ‘11’,则导致输入不正确的参数所有信息都被打印出来
4.SQL注入漏洞的解决办法 使用PreparedStatement对象代替Statement对象执行SQL该对象可以预编译SQL语句固定SQL的格式和关键字用?占位符表示传递的数据后期设置数据即可 【PreparedStatement为Statement的子类】 PreparedStatement的使用 【第一步】使用Connection对象获取PreparedStatement对象预编译sql 【第二步】如果SQL中有几个?占位符那么就设置几个参数。 【第三步】调用executeQuery()或者executeUpdate()方法执行SQL但是不用再传递SQL。
//3 创建执行SQL的对象
pstmt connection.prepareStatement(insert into student values(null,?,?,?));
//有几个?就设置几个参数
pstmt.setString(1,stu.getName());
pstmt.setInt(2,stu.getAge());
pstmt.setString(3,stu.getBirthday());
//4 执行SQL得到结果
count pstmt.executeUpdate();