关于utf-8编码规范练习题

目录

一、代码内容

二、MySQL内容

三、代码遇到的问题

遭遇:

解决思路:

四、出现问题1

断点调试,分析问题

发现问题点:

问题解决

五、出现问题2

原因:

举例:

举例总结:


一、代码内容

二、MySQL内容

创建table1表并插入数据

sql 复制代码
mysql> use security

mysql> create table table1(id int(10) primary key auto_increment,username varchar(50) not null,password varchar(50) not null);

mysql> desc table1;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(10)     | NO   | PRI | NULL    | auto_increment |
| username | varchar(50) | NO   |     | NULL    |                |
| password | varchar(50) | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

mysql> insert into table1(id,username,password) values(1,'admin','admin');

mysql> select * from table1;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | admin    | admin    |
+----+----------+----------+

三、代码遇到的问题

遭遇:

想要查询到admin就必须username=admin

但是访问username=admin 就会打印出Permission denied!从而停在这里

测试

解决思路:

在admin后加类似%%的字符 MySQL将%%进行删掉,放弃

这样程序进行 不是admin 而mysql执行的是admin

使用username=admin%c2尝试

四、出现问题1

断点调试,分析问题

发现问题点:

注意到了sql返回的执行语句 table1是带单引号的

在mysql尝试发现错误

去掉table1的单引号

问题解决

五、出现问题2

为什么是%c2呢 为什么%c1就不行

原因:

造成这个Trick的根本原因是,Mysql字段的字符集和php mysqli客户端设置的字符集不相同

整个操作就有如下字符串转换过程:

utf8 --> utf8 --> latin1

最后执行比较username='admin'的时候,'admin'是一个latin1字符串

utf-8---->utf-8---->gbk

基本原因是utf-8遇到了不完整的编码进而进行忽略

举例:

1、http://127.0.0.1/mysql_1.php?username=admin�

2、http://127.0.0.1/mysql_1.php?username=admin��

3、http://127.0.0.1/mysql_1.php?username=admin佬

举例总结:

我们查询username=admin%e4时,%e4被省略,最后查出了username=admin的结果。

举例的1和2 就是utf-8的编码不完整会忽略其部分 所有可以注入成功

而举例的3 就是完整的utf-8的编码 会解译为佬 所有可以注入失败

相关推荐
2501_916008897 小时前
深入解析iOS机审4.3原理与混淆实战方法
android·java·开发语言·ios·小程序·uni-app·iphone
独行soc8 小时前
2026年渗透测试面试题总结-20(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
常利兵8 小时前
2026年,Android开发已死?不,它正迎来黄金时代!
android
Risehuxyc9 小时前
备份三个PHP程序
android·开发语言·php
Doro再努力18 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
Daniel李华19 小时前
echarts使用案例
android·javascript·echarts
做人不要太理性19 小时前
CANN Runtime 运行时组件深度解析:任务调度机制、存储管理策略与维测体系构建逻辑
android·运维·魔珐星云
我命由我1234520 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
朗迹 - 张伟20 小时前
Tauri2 导出 Android 详细教程
android
lpruoyu21 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习