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 相关文章推荐
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
如何用C语言编写PHP扩展的详解
Jun 13 PHP
解析ajax事件的调用顺序
Jun 17 PHP
Win下如何安装PHP的APC拓展
Aug 07 PHP
php封装好的人民币数值转中文大写类
Dec 20 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
Dec 10 PHP
在php7中MongoDB实现模糊查询的方法详解
May 03 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
php装饰者模式简单应用案例分析
Oct 23 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采集相关教程之一 CURL函数库
2010/02/15 PHP
php实现的漂亮分页方法
2014/04/17 PHP
Yii框架form表单用法实例
2014/12/04 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
jquery操作 iframe的方法
2014/12/03 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
python中的sort方法使用详解
2014/07/25 Python
让 python 命令行也可以自动补全
2014/11/30 Python
自己使用总结Python程序代码片段
2015/06/02 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
实用自动化运维Python脚本分享
2018/06/04 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
Tensorflow 多线程设置方式
2020/02/06 Python
python实现感知机模型的示例
2020/09/30 Python
文史专业毕业生自荐信
2013/11/17 职场文书
房地产出纳岗位职责
2013/12/01 职场文书
高中毕业生生活的自我评价
2013/12/08 职场文书
竞选村长演讲稿
2014/04/28 职场文书
办理房产过户的委托书
2014/09/14 职场文书
2014国庆节标语口号
2014/09/19 职场文书
教师节领导致辞
2015/07/29 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL