演示SQL注入攻击
以用户登录案例分析
数据库数据:
用户登录案例代码实现:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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("登录失败"); } } }
正确的输入和错误输入的运行结果:
看起来并没有问题,但是当换成另一种输入时:
此时发生了SQL注入攻击,我们打印sql语句会发现:select * from users where uname = 'admin'and upass = 'fewni' or'1'='1'
使用+进行sql语句拼接时,会改变sql语句原本要表达的意思,在sql语句中拼接一个永远成立的条件,会使前面的所有条件都失效
学习的博客多用于在笔记中,防止笔记过于臃肿,所以将样例及运行结果放在博客中,后以超链接的形式记录在笔记中,所以有些博文过于单薄。如果有小伙伴遇到问题欢迎评论,看到就会回复,学渣一枚,加油努力。