抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

mysql1SELECT * FROM vacate WHERE create_time BETWEEN '2020-1-1 00:00:00' AND '2020-1-7 09:18:00'; mybatis mapper 12345678910<if test="submitFrom != null and submitTo !=...

转载:https://www.cnblogs.com/loveyoulx/p/9526068.html

思考与理解

SQL注入本质上,是程序将用户输入的参数当成命令的一部分进行解析,从而使用户可以自由搜索我们的数据库中的记录。

解决方法,是将用户输入的内容进行解析和转义,将用户输入内容中的恶意代码转为普通字符串,从而保护数据库不被攻击。

SQL 注入攻击

SQL注入攻击,简称SQL攻击或注入攻击,是发生于应用程序之数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。

最常见的就是我们在应用程序中使用字符串联结方式组合 SQL 指令,有心之人就会写一些特殊的符号,恶意篡改原本的 SQL 语法的作用,达到注入攻击的目的。

举个栗子:

比如验证用户登录需要 username 和 password,编写的 SQL 语句如下:

1
String querySql = "select * from user where (name = '"+ username +"') and (pw = '"+ password +"');";

username 和 password 字段被恶意填入

1
username = "1' OR '1'='1";

1
password = "1' OR '1'='1";

将导致原本的 SQL 字符串被填为:

1
select * from user where (name = '1' or '1'='1') and (pw = '1' or '1'='1');

实际上运行的 SQL 语句将变成:

1
select * from user;

也就是不再需要 username 和 password 账密即达到登录的目的,结果不言而喻。

一切得先从我的操作说起。

在集成mybatis-plus过程中,我将 pagehelper-spring-boot-starter 拆成两个依赖包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- 分页插件 -->
<!-- <dependency>-->
<!-- <groupId>com.github.pagehelper</groupId>-->
<!-- <artifactId>pagehelper-spring-boot-starter</artifactId>-->
<!-- <version>1.2.5</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.4</version>
</dependency>
<!-- pagehelper 依赖 -->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>1.0</version>
</dependency>

官网文档

代码生成器

代码生成器配置

文档理解

代码生成器的名字叫 AutoGenerator

代码生成器配置分为以下几项

  • GlobalConfig 全局配置
  • DataSourceConfig 数据源配置
  • PackageConfig 包配置
  • InjectionConfig 自定义配置(可以猜是不是模板引擎对应的配置了)
  • TemplateConfig 配置模板
  • StrategyConfig 策略配置

注意的事项

  1. DataSourceConfig 必须配置数据库类型

  Github地址
  pagehelper是github上开源的分页插件,可以做到无侵入,不用修改select语句的分页插件,它应该是通过调用mybatis钩子,在查询时自动修改查询语句,自动加上limit语句做到分页的。

这个元素可以被用来定义可重用的 SQL 代码段,这些 SQL 代码可以被包含在其他语句中。它可以(在加载的时候)被静态地设置参数。 在不同的包含语句中可以设置不同的值到参数占位符上。比如: 123456789<sql id="Example_Where_Clause"> where 1=1 <if test="userName != n...

1、mybatis-generator 概述MyBatis官方提供了逆向工程 mybatis-generator,可以针对数据库表自动生成MyBatis执行所需要的代码(如Mapper.java、Mapper.xml、POJO)。mybatis-generator 有三种用法:命令行、eclipse插件、maven插件。而maven插件的方式比较通用,本文也将概述maven插件的使用方式。 ...

通用性比较好的增改查1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798...

查找表简单查询 123<select id="selectPerson" parameterType="int" resultType="hashmap"> SELECT * FROM PERSON WHERE ID = #{id}</select> 这个语句被称作 selectPer...

1234567891011121314151617<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybat...