介绍
这篇文章主要介绍了怎么防止SQL注入,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
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编写一个登录程序强>
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来代替声明进行处理。