需求
承接上文JDBC-SQL注入简介. 在大概了解了什么是SQL注入之后,接下来使用test_02
数据库表模拟用户登录操作.
提示用户输入用户名和密码,使用Statement字符串拼接的方式实现用户登录
步骤
JDBC-编写工具类
- 调用
JDBCUtils
工具类获取连接 - 调用
JDBCUtils
工具类获取语句执行平台(即Statement对象) - 提示用户输入用户名和密码
- 执行字符串接接后的sql语句
- 判断是否登录成功
- 调用
JDBCUtils
工具类关闭对象
代码示例
public class LoginTest01 {
public static void main(String[] args) throws SQLException {
// 1.获取连接
Connection conn = JDBCUtils.getConnection();
// 2.获取执行平台,即Statement对象
Statement sqlExecute = JDBCUtils.createStatement(conn);
// 3.提示用户输入用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名: ");
String user = sc.nextLine();
System.out.println("请输入密码: ");
String pass = sc.nextLine();
// 4.执行字符串拼接后的sql语句
String sql = "select * from test_02 where name = '" + user + "' and password = '" + pass + "';";
System.out.println(sql);//查看执行的sql语句
ResultSet resultSet = sqlExecute.executeQuery(sql);
// 5.判断是否登录成功
if(resultSet.next()){
System.out.println("登录成功,欢迎:" + user);
}else{
System.out.println("登录失败!");
}
// 5.关闭对象
JDBCUtils.close(conn,sqlExecute,resultSet);
}
}
运行结果一(正常输入)
运行结果二(SQL注入)
如上, 我们使用一种比较"巧妙"的方式就骗过了登录验证
出现这种问题的原因是使用了字符串拼接. 所以理论上如果我们不使用字符串拼接,应该就可以防止SQL注入. 即prepareStatement
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。