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 相关文章推荐
CMS中PHP判断系统是否已经安装的方法示例
Jul 26 PHP
PHP遍历文件夹与文件类及处理类用法实例
Sep 23 PHP
php图片处理函数获取类型及扩展名实例
Nov 19 PHP
php实现简单文件下载的方法
Jan 30 PHP
php通过exif_read_data函数获取图片的exif信息
May 21 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
php5.3后静态绑定用法详解
Nov 11 PHP
laravel中的一些简单实用功能
Nov 03 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 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网站基础优化方法小结
2008/09/29 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &
2010/02/09 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
CL vs ForZe BO5 第五场 2.13
2021/03/10 DOTA
JS基础之undefined与null的区别分析
2011/08/08 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
详解Require.js与Sea.js的区别
2018/08/05 Javascript
js数组的基本使用总结
2021/01/18 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
在Python中使用HTML模版的教程
2015/04/29 Python
Python标准库之itertools库的使用方法
2017/09/07 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
python3中eval函数用法使用简介
2019/08/02 Python
python 进程池pool使用详解
2020/10/15 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
高中生评语大全
2014/04/25 职场文书
法制宣传教育方案
2014/05/09 职场文书
教育合作协议范本
2014/10/17 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
小学优秀教师材料
2014/12/15 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
公务员个人年终总结
2015/02/12 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书