演示SQL注入攻击

以用户登录案例分析

数据库数据:

用户登录案例代码实现:

public class JDBCDemoLogin {
    public static void main(String[] args) throws SQLException {
        //1.获取页面数据
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String userName = sc.nextLine();
        System.out.println("请输入密码:");
        String passWord = sc.nextLine();

        //2.获取数据库连接对象
        Connection con = JDBCUtil.getConnect();

        //3.获取执行sql语句的对象
        Statement stmt = con.createStatement();

        String sql = "select * from users where uname = '"+userName+"'and upass = '"+passWord+"'";

        //执行查询
        ResultSet rs = stmt.executeQuery(sql);
        if (rs.next()){
            System.out.println("登录成功");
        }else{
            System.out.println("登录失败");
        }
    }
}
View Code

正确的输入和错误输入的运行结果:

看起来并没有问题,但是当换成另一种输入时:

此时发生了SQL注入攻击,我们打印sql语句会发现:select * from users where uname = 'admin'and upass = 'fewni' or'1'='1'

使用+进行sql语句拼接时,会改变sql语句原本要表达的意思,在sql语句中拼接一个永远成立的条件,会使前面的所有条件都失效

posted @ 2020-08-14 18:19  硬盘红了  阅读(163)  评论(0编辑  收藏  举报