SQL注入

一、什么是SQL注入?

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。

二、SQL注入总体思路

1、寻找到SQL注入的位置

2、判断服务器类型和后台数据库类型

3、针对不通的服务器和数据库特点进行SQL注入攻击

三、登录举例

SQL语句

String sql="select * from table where username='"+userName+"’and password='"+password+” '”;

select * from sys_user where user_name = ${username} and ${password}

测试输入 可查询到该表所有数据

SELECT * FROM table WHERE username='1’or 1=1 # and password=''

加上limit(分页) 可以直接查询到单点数据 加上 # 直接注释掉后面的sql语句 这样就导致了sql入侵

SELECT * FROM table WHERE username='1’or 1=1 limit 1 # and password=''

四、怎么防止sql注入?

1、不要图一时方便使用SQL语句直接拼接。

2、如果用SQL语句,那就使用参数化,添加Param。

3、尽可能的使用存储过程,安全性能高而且处理速度也快。

4、屏蔽SQL注入。

5、使用Mybatis的时候将 $ 替换成 #

五、#{}与${}的基本概念

在MyBatis中,#{}${}都用于参数绑定,但它们的处理方式有所不同:

#{}用于预编译,可以防止SQL注入攻击,通常用于动态拼接SQL语句中的值。

${}直接替换成相应的参数值,可以用于动态拼接SQL语句中的列名、表名等不需要预编译的部分。

详细可查看该篇文章:深入解析MyBatis中#{}与${}的区别:从源码角度揭秘底层实现原理-阿里云开发者社区 (aliyun.com)

六、真题例子

Mybatis $ 和 # 的区别

相同点:

都能取到变量

不同点:

#可以实现预编译,会先把#{变量}编译成?,在执行时再取值,可以有效防止sql注入

$直接进行字符串替换

MyBatis关键流程

1. 初始化过程

MyBatis的初始化过程包括解析配置文件、创建SqlSessionFactory、加载映射器文件等步骤。在初始化过程中,MyBatis会读取配置文件中的信息,并根据配置信息创建相应的对象。

2. SQL语句处理流程

SQL语句处理流程包括SQL语句的解析、参数绑定、SQL语句的执行等步骤。在执行SQL语句时,MyBatis会根据映射器接口的方法名查找相应的SQL语句,并将参数绑定到SQL语句中,最终执行SQL语句并返回结果。

3. 缓存机制

MyBatis提供了一级缓存和二级缓存两种缓存机制,用于提高SQL查询的性能。一级缓存是SqlSession级别的缓存,二级缓存是Mapper级别的缓存。MyBatis会根据配置信息自动管理缓存的生命周期,并在需要时自动更新缓存中的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值