PHP 小心urldecode引发的SQL注入漏洞


Posted in PHP onOctober 27, 2011

Ihipop 学校的 Discuz X1.5 论坛被黑,在那里吵了一个下午。Google 一下“Discuz! X1-1.5 notify_credit.php Blind SQL injection exploit”,你就知道。

Discuz 是国内很流行的论坛系统,被黑的网站应该会很多吧。不过我对入侵别人的网站不感兴趣,同时也鄙视那些代码都不会写只会使用别人放出的工具攻击的所谓的“黑客”。

粗略看了一下代码,这个 SQL 注入漏洞是 urldecode 函数造成的。在 PHP 手册中,urldecode 函数下面有一个警告:

The superglobals $_GET and $_REQUEST are already decoded. Using urldecode() on an element in $_GET or $_REQUEST could have unexpected and dangerous results.

而 Discuz 的开发人员(估计是新手)画蛇添足,多加了一个 urldecode:

foreach($_POST as $k => $v) { 
$value = urldecode($v); 
$this->setParameter($k, $value); 
}

单引号被 urlencode 两次以后是 %2527,然后 POST,PHP 内部在生成全局变量 $_POST 的时候会先 urldecode,得到 %27,然后 PHP 会检查 Magic Quotes 的设置,但是无论是否开启 Magic Quotes,%27 都不会被 addslashes,因为这时根本没有单引号。但是这时如果你在 PHP 代码中画蛇添足的加上 urldecode,%27就变成单引号了,然后……你懂的。

在我初学 PHP 的时候,看的是学校图书馆的一本烂书,里面根本就没写 PHP 在处理表单的时候会自动 urldecode,所以自己用 urldecode 函数来解码(依稀记得书上好像也是这么写的,真是误人子弟啊)。

总结一下,就是:1、选择一本好书非常重要;2、慎用 urldecode 函数。3、注意 PHP 手册中的警告。
原文来自 http://demon.tw/programming/php-urldecode-sql-injection.html

PHP 相关文章推荐
php 连接mssql数据库 初学php笔记
Mar 01 PHP
php curl模拟post请求小实例
Nov 13 PHP
php curl post 时出现的问题解决
Jan 30 PHP
PHP判断指定时间段的2个方法
Mar 14 PHP
php中curl和file_get_content的区别
May 10 PHP
php常用字符串处理函数实例分析
Nov 22 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
PHP文件后缀不强制为.php方法
Mar 31 PHP
Session保存到数据库的php类分享
Oct 24 #PHP
php中批量修改文件后缀名的函数代码
Oct 23 #PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 #PHP
php中经典方法实现判断多维数组是否为空
Oct 23 #PHP
PHP禁止页面缓存的代码
Oct 23 #PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 #PHP
供参考的 php 学习提高路线分享
Oct 23 #PHP
You might like
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
python构造IP报文实例
2020/05/05 Python
简单了解如何封装自己的Python包
2020/07/08 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
员工自我鉴定
2013/10/09 职场文书
路政管理专业推荐信
2013/11/11 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
小学生安全保证书
2015/05/09 职场文书
房屋产权证明书
2015/06/19 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android