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 相关文章推荐
更改localhost为其他名字的方法
Feb 10 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
php截取html字符串及自动补全html标签的方法
Jan 15 PHP
PHP+MYSQL中文乱码问题
Jul 01 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
PHP函数func_num_args用法实例分析
Dec 07 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
Zend Framework创建自己的动作助手详解
Mar 05 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 PHP
php操作redis数据库常见方法实例总结
Feb 20 PHP
phpQuery采集网页实现代码实例
Apr 02 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访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
cookie的secure属性详解
2015/04/08 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
Zabbix实现微信报警功能
2016/10/09 Python
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
python读写csv文件实例代码
2019/07/05 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
PHP面试题附答案
2015/11/28 面试题
宝信软件JAVA工程师面试经历
2012/08/19 面试题
校长岗位职责
2013/11/26 职场文书
高三政治教学反思
2014/02/06 职场文书
门店业绩提升方案
2014/06/08 职场文书
统计专业自荐书
2014/07/06 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL