需要

承接上文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