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模板引擎SMARTY
Oct 09 PHP
关于PHP中的Class的几点个人看法
Oct 09 PHP
php的控制语句
Oct 09 PHP
php 随机生成10位字符代码
Mar 26 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
基于PHP实现通过照片获取ip地址
Apr 26 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
php中this关键字用法分析
Dec 07 PHP
创建无限极分类树型结构的简单方法
Jun 20 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 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开发大型项目的一点经验
2006/10/09 PHP
php session安全问题分析
2011/06/24 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
php命令行写shell实例详解
2018/07/19 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
python获取豆瓣电影简介代码分享
2014/01/16 Python
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python实现分割文件及合并文件的方法
2015/07/10 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
测绘工程专业求职信
2014/07/15 职场文书
报效祖国演讲稿
2014/09/15 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
会计工作检讨书
2015/02/19 职场文书
学雷锋感言
2015/08/03 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
Python使用pandas导入xlsx格式的excel文件内容操作代码
2022/12/24 Python