怎么防止SQL注入

  介绍

这篇文章主要介绍了怎么防止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 , *,得到用户;

<强> 怎么防止SQL注入

<强> 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正常登录

输入正确的用户名及密码后提示“登录成功“

怎么防止SQL注入

<强> 1.4登录失败

输入用户名或密码错误时,提示”用户名或密码错误,请重新输入”

怎么防止SQL注入

<强> 1.5模拟SQL注入

拼接的字符串中有或& # 39;1 & # 39;=& # 39;1 & # 39;为恒成立条件,因此及时前面的用户及密码不存在也会取出所有记录,因此提示“登录成功“

怎么防止SQL注入

<强> 1.6 SQL语法报错

使用拼接的方式,还会出现SQL语法错误等报错,例如

怎么防止SQL注入

<强> 2。解决方案

使用声明方式,用户可以通过字符串拼接,改变原本SQL真正的含义,导致存在SQL注入的风险。解决SQL注入,可以通过预处理对象PreparedStatement来代替声明进行处理。

怎么防止SQL注入