本文共 1281 字,大约阅读时间需要 4 分钟。
【前言】
针对中,通过SQL语句漏洞进行注入攻击的案例,在本篇博客,我们就来学习一下,如何预防SQL注入攻击。
【思路】
使用 Statement 的一个子接口 PreparedStatement prepareStatement(String sql) ,来实现预防SQL注入
【代码】
public class JDBCDemo3 { public static void main(String[] args)throws Exception { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/day07"; String username = "root"; String password = "root"; Connection con = DriverManager.getConnection(url, username, password); Scanner sc = new Scanner(System.in); System.out.print("用户名:"); String user = sc.nextLine(); System.out.print("密码:"); String pass = sc.nextLine(); //执行SQL语句,数据表,查询用户名和密码,如果存在,登录成功,不存在登录失败 String sql = "SELECT * FROM users WHERE username=? AND PASSWORD=?"; //调用Connection接口的方法prepareStatement,获取PrepareStatement接口的实现类 //方法中参数,SQL语句中的参数全部采用问号占位符 PreparedStatement pst = con.prepareStatement(sql); System.out.println(pst); //调用pst对象set方法,设置问号占位符上的参数 pst.setObject(1, user); pst.setObject(2, pass); //调用方法,执行SQL,获取结果集 ResultSet rs = pst.executeQuery(); while(rs.next()){ System.out.println("登陆成功!"); System.out.println("您的用户名为:"+rs.getString("username")+" 您的密码为:"+rs.getString("password")); } rs.close(); pst.close(); con.close(); }}
正常登陆:
进行SQL注入攻击:
因此,建议以后的登录校验中,使用Statement 的子接口prepareStatement,可以防止注入攻击。
转载地址:http://ynirn.baihongyu.com/