介绍 1, SQL注入案例
本篇文章为大家展示了出现SQL注入如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
1, SQL注入案例
模拟一个用户登录的SQL注入案例,用户在控制台上输入用户名和密码,然后使用声明字符串拼接的方式实现用户的登录。
<强> 1.1数据库中先创建用户表及数据强>
——,创建一张用户表 CREATE TABLE “用户”,( ,“id”INT (11), NOT NULL AUTO_INCREMENT, ,“用户名”VARCHAR (20), ,“密码”VARCHAR (50), ,PRIMARY KEY (id) ),引擎=INNODB DEFAULT CHARSET=use utf8; ——,插入数据 INSERT INTO 用户(用户名、密码),值(& # 39;张飞& # 39;,& # 39;123321 & # 39;),(& # 39;赵云& # 39;,& # 39;qazxsw& # 39;),(& # 39;诸葛亮& # 39;,& # 39;123年qwe& # 39;); INSERT INTO 用户(用户名、密码),值(& # 39;曹操& # 39;,& # 39;741258 & # 39;),(& # 39;刘备& # 39;,& # 39;plmokn& # 39;),(& # 39;孙权& # 39;,& # 39;! @ # $ % ^ & # 39;); ——,查看数据 SELECT *,得到用户;
<强> 1.2编写一个登录程序强>
package com.study.task0201; import java.sql。*; import java.util.Scanner; public class  TestSQLIn { ,public static  void main (String [], args), throws ClassNotFoundException,, SQLException { forname才能(“com.mysql.jdbc.Driver"); String 才能;url =,“jdbc: mysql://127.0.0.1:3306/testdb ? characterEncoding=UTF-8"; Connection 才能;conn =, DriverManager.getConnection (url,“root",“123456“);//System.out.println才能(康涅狄格州);//,才能获取语句执行平台对象,声明 Statement 才能;smt =, conn.createStatement (); Scanner 才能;sc =, new 扫描仪(系统); System.out.println才能(“请输入用户名:“); String 才能;userName =, sc.nextLine (); System.out.println才能(“请输入密码:“); String 才能;password =, sc.nextLine (); String 才能;sql =,“select *,得到users where username =, & # 39;“, +, username +,“& # 39;,以及password =, & # 39;“, +, password +“& # 39;“,,,//打印出SQL System.out.println才能(sql); ResultSet 才能;ResultSet =, smt.executeQuery (sql); 如果才能(resultSet.next ()) { ,,System.out.println(“登录成功! ! !“); }{其他才能 ,,System.out.println(“用户名或密码错误,请重新输入! ! !“); ,,} resultSet.close才能(); smt.close才能(); conn.close才能(); ,} }
<强> 1.3正常登录强>
输入正确的用户名及密码后提示“登录成功“
<强> 1.4登录失败强>
输入用户名或密码错误时,提示”用户名或密码错误,请重新输入”
<强> 1.5模拟SQL注入强>
拼接的字符串中有或& # 39;1 & # 39;=& # 39;1 & # 39;为恒成立条件,因此及时前面的用户及密码不存在也会取出所有记录,因此提示“登录成功“
<强> 1.6 SQL语法报错强>
使用拼接的方式,还会出现SQL语法错误等报错,例如
2。解决方案
使用声明方式,用户可以通过字符串拼接,改变原本SQL真正的含义,导致存在SQL注入的风险。解决SQL注入,可以通过预处理对象PreparedStatement来代替声明进行处理。
<强> 2.1程序强>
import java.sql。*; import java.util.Scanner; public class  TestSQLIn { ,public static  void main (String [], args), throws ClassNotFoundException,, SQLException { forname才能(“com.mysql.jdbc.Driver"); String 才能;url =,“jdbc: mysql://127.0.0.1:3306/testdb ? characterEncoding=UTF-8"; Connection 才能;conn =, DriverManager.getConnection (url,“root",“123456“);//System.out.println才能(康涅狄格州);//,才能获取语句执行平台对象,声明//才能,Statement smt =, conn.createStatement (); Scanner 才能;sc =, new 扫描仪(系统); System.out.println才能(“请输入用户名:“); String 才能;userName =, sc.nextLine (); System.out.println才能(“请输入密码:“); String 才能;password =, sc.nextLine (); String 才能;sql =,“select *,得到users where username =, ?,以及password =, ?,“;//才能,System.out.println (sql);//才能,ResultSet ResultSet =, smt.executeQuery (sql); PreparedStatement 才能;PreparedStatement =, conn.prepareStatement (sql); null null null null null null null null null null null null null null null null null null null出现SQL注入如何解决