广告
返回顶部
首页 > 资讯 > 数据库 >SQL注入怎么解决
  • 277
分享到

SQL注入怎么解决

2024-04-02 19:04:59 277人浏览 独家记忆
摘要

小编给大家分享一下sql注入怎么解决,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言SQL注入即是指WEB应用程序对用户输入数

小编给大家分享一下sql注入怎么解决,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

前言

SQL注入即是指WEB应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

1、SQL注入案例

模拟一个用户登录的SQL注入案例,用户在控制台上输入用户名和密码, 然后使用 Statement 字符串拼接的方式实现用户的登录。

1.1 数据库中先创建用户表及数据

-- 创建一张用户表
CREATE TABLE `users` (
 `id` INT(11) NOT NULL AUTO_INCREMENT,
 `username` VARCHAR(20),
 `passWord` VARCHAR(50),
 PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 插入数据
INSERT INTO users(username,`password`) VALUES('张飞','123321'),('赵云','qazxsw'),('诸葛亮','123Qwe');
INSERT INTO users(username,`password`) VALUES('曹操','741258'),('刘备','plmokn'),('孙权','!@#$%^');

-- 查看数据
SELECT * FROM users;

SQL注入怎么解决

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 {
  Class.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(conn);
  // 获取语句执行平台对象 Statement
  Statement smt = conn.createStatement();

  Scanner sc = new Scanner(System.in);
  System.out.println("请输入用户名:");
  String userName = sc.nextLine();
  System.out.println("请输入密码:");
  String password = sc.nextLine();

  String sql = "select * from users where username = '" + userName + "' and password = '" + password +"'";  //打印出SQL
  System.out.println(sql);
  ResultSet resultSet = smt.executeQuery(sql);
  if(resultSet.next()){
   System.out.println("登录成功!!!");
  }else{
   System.out.println("用户名或密码错误,请重新输入!!!");
  }

  resultSet.close();
  smt.close();
  conn.close();

 }

}

1.3 正常登录

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

SQL注入怎么解决

1.4 登录失败

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

SQL注入怎么解决

1.5 模拟SQL注入

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

SQL注入怎么解决

1.6 SQL语法报错

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

SQL注入怎么解决

2. 解决方案

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

2.1 程序

import java.sql.*;
import java.util.Scanner;

public class TestSQLIn {
 public static void main(String[] args) throws ClassNotFoundException, SQLException {
  Class.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(conn);
  // 获取语句执行平台对象 Statement
  // Statement smt = conn.createStatement();

  Scanner sc = new Scanner(System.in);
  System.out.println("请输入用户名:");
  String userName = sc.nextLine();
  System.out.println("请输入密码:");
  String password = sc.nextLine();

  String sql = "select * from users where username = ? and password = ? ";
  // System.out.println(sql);
  // ResultSet resultSet = smt.executeQuery(sql);
  PreparedStatement preparedStatement = conn.prepareStatement(sql);
  preparedStatement.setString(1,userName);
  preparedStatement.setString(2,password);

  ResultSet resultSet = preparedStatement.executeQuery();
  if(resultSet.next()){
   System.out.println("登录成功!!!");
  }else{
   System.out.println("用户名或密码错误,请重新输入!!!");
  }


  preparedStatement.close();
  resultSet.close();
  // smt.close();
  conn.close();

 }

}

2.2 正常登录

SQL注入怎么解决

2.3 用户名密码错误

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

SQL注入怎么解决

2.4 模拟SQL注入

按照之前的情况,进行SQL注入的写法,测试后不再出现SQL注入情况。

SQL注入怎么解决

2.5 模拟SQL语法错误

使用预处理类后,输入带有单引号或双引号的内容也不会再出现SQL语法错误的报错

SQL注入怎么解决

3. 小结

Statement 与 PreparedStatement的主要区别如下:

  • Statement用于执行静态SQL语句,在执行时,必须指定一个事先准备好的SQL语句

  • PrepareStatement是预编译的SQL语句对象,语句中可以包含动态参数“?”,在执行时可以为“?”动态设置参数值

  • PrepareStatement可以减少编译次数提高数据库性能

以上是“SQL注入怎么解决”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: SQL注入怎么解决

本文链接: https://www.lsjlt.com/news/55288.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL注入怎么解决
    小编给大家分享一下SQL注入怎么解决,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言SQL注入即是指web应用程序对用户输入数...
    99+
    2022-10-18
  • sql注入报错怎么解决
    今天小编给大家分享一下sql注入报错怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。0x01我们先来看一看现...
    99+
    2023-07-02
  • 怎么使用prepared statement解决SQL注入问题
    使用prepared statement可以有效地防止SQL注入问题。下面是使用prepared statement的一般步骤:1....
    99+
    2023-08-08
    SQL
  • thinkPHP3.2.3中sql注入漏洞问题怎么解决
    这篇文章主要介绍“thinkPHP3.2.3中sql注入漏洞问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“thinkPHP3.2.3中sql注入漏洞问题怎么解决”文章能帮助大家解决问题。...
    99+
    2023-06-30
  • mybatis使用${}时sql注入的问题怎么解决
    这篇文章给大家介绍mybatis使用${}时sql注入的问题怎么解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。mybatis使用${}时sql注入的问题最近在上线项目的时候,代码审查没有通过,提示有sql注入的风险...
    99+
    2023-06-22
  • tp是如何解决sql注入的
    tp解决sql注入的方法:系统底层对于数据安全方面本身进行了相应的防范机制,例如:$User = M("User"); // 实例化User对象$User->find($_GET["id"]);查询条件进行预处理,where方法使...
    99+
    2022-10-07
  • SQL注入详解
    本文首发于:行者AI 现在大多数系统都使用B/S架构,出于安全考虑需要过滤从页面传递过来的字符。通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往会出现...
    99+
    2023-09-05
    sql 数据库 php
  • 【SQL注入详解】
    文章目录 前言题目1.SQL注入原理,危害,类型,防护措施,绕过方式,写入webshell的前提条件原理:危害:类型:1.union联合注入2.报错注入3.布尔盲注4.时间盲注5.二...
    99+
    2023-09-05
    sql 数据库 安全 php web安全
  • Mybatis-plus sql注入及防止sql注入详解
    目录一、SQL注入是什么?二、mybatis是如何做到防止sql注入的1. #{} 和 ${} 两者的区别2.PreparedStatement和Statement的区别3.什么是预...
    99+
    2022-11-13
    mybatis-plus sql注入 mybatis-plus防止sql注入
  • 如何解决SQL注入漏洞问题
    本篇内容介绍了“如何解决SQL注入漏洞问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言最近我在整理安...
    99+
    2022-10-18
  • 遇见SQL注入应该如何解决
    这篇文章主要介绍了遇见SQL注入应该如何解决,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。SQL注入是什么?看一下百度百科的定义: 啊,好长一大段文字,些许不想看,下面通过一个例子,来说...
    99+
    2022-10-18
  • 如何彻底解决sql注入问题
    彻底解决sql注入问题的方法:采用PreparedStatement进行预编译,sql语句在执行的过程中效率比Statement要高,例如:String sql = "select* from users wher...
    99+
    2022-10-16
  • 怎么防止SQL注入
    这篇文章主要介绍了怎么防止SQL注入,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQL注入即是指web应用程序对用户输入数据的合法性没有判...
    99+
    2022-10-18
  • 怎么防御SQL注入
    这篇文章主要介绍怎么防御SQL注入,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段...
    99+
    2022-10-18
  • 怎么进行sql注入
    这篇文章主要介绍了怎么进行sql注入,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入...
    99+
    2022-10-18
  • SQL注入怎么防范
    这篇文章主要介绍“SQL注入怎么防范”,在日常操作中,相信很多人在SQL注入怎么防范问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL注入怎么防范”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!一:什么是...
    99+
    2023-06-21
  • 怎么实现SQL注入
    今天就跟大家聊聊有关怎么实现SQL注入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是SQL注入SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作。Sql ...
    99+
    2023-06-15
  • sql注入怎么插入语句
    sql注入中插入语句的语法格式为:Insert into 表名(字段1,字段2,字段3,...)values (值1,值2,值3...);示例://插入一个user用户表,字段有id、name,值为1和linInsert into 'use...
    99+
    2022-10-09
  • SQL注入之盲注怎么实现
    这篇文章主要介绍“SQL注入之盲注怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQL注入之盲注怎么实现”文章能帮助大家解决问题。sql注入——盲注1.回顾...
    99+
    2022-10-19
  • 如何解决SQL注入的安全问题
    这篇文章主要为大家展示了“如何解决SQL注入的安全问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决SQL注入的安全问题”这篇文章吧。黑名单过滤技术1、...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作