sql编码造成的安全问题(基于mysql8.0版本)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了sql编码造成的安全问题(基于mysql8.0版本),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1483字,纯文字阅读大概需要3分钟。
内容图文
![sql编码造成的安全问题(基于mysql8.0版本)](/upload/InfoBanner/zyjiaocheng/886/d0257f647e4f4b3fb7bad8bb2216779c.jpg)
参考文章:https://www.leavesongs.com/PENETRATION/mysql-charset-trick.html
https://www.leavesongs.com/PENETRATION/Mini-XCTF-Writeup.html
建议先看下上面两篇文章
参考离别歌大神测试了一下mysql8.0版本是否也存在这个问题
mysql8.0开始,默认编码是utf8mb4,但总有数据库会设置为gbk,所以也可能存在同样编码问题
<?php
define('DBHOST', '127.0.0.1');
define('DBUSER', 'root');
define('DBPW', 'password');
define('DBNAME', 'stu');
define('DBPORT', '3306');
$link=@mysqli_connect(DBHOST, DBUSER, DBPW, DBNAME, DBPORT);
for($i = 0 ; $i < 256 ; $i++){
$c = chr($i);
$name = @mysqli_real_escape_string($link,'201215121' . $c);
$sql = "SELECT * FROM `s` WHERE `sno` = '{$name}'";
$result=@mysqli_query($link,$sql);
$row = @mysqli_fetch_array($result,MYSQLI_NUM);
if ($row[0] == '201215121') {
echo "$i";
echo "{$c} <br/>";
}
}
输出$c时可能会出现乱码,所以可以echo utf8_encode($i);
这里是ascii码0-256所有的对照字符 https://blog.csdn.net/ttmice/article/details/50978054
mysql8.0基本也存在同样的问题,对于其他编码,需要自己再进行测试
tips:测试发现无论后面添加多少空格,查询都是可行的,猜测sql查询会自动去掉空格,不过其它空白符不行
测试代码:
<?php
define('DBHOST', '127.0.0.1');址
define('DBUSER', 'root');
define('DBPW', 'password');
define('DBNAME', 'stu');
define('DBPORT', '3306');
$link=@mysqli_connect(DBHOST, DBUSER, DBPW, DBNAME, DBPORT);
$name = @$_GET['name'];
$sql = "SELECT * FROM `s` WHERE `sno` = '{$name}'";
$result=@mysqli_query($link,$sql);
$row = @mysqli_fetch_array($result,MYSQLI_NUM);
echo $row[0];
?>
内容总结
以上是互联网集市为您收集整理的sql编码造成的安全问题(基于mysql8.0版本)全部内容,希望文章能够帮你解决sql编码造成的安全问题(基于mysql8.0版本)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。