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与SQL注入攻击[一]
Apr 17 PHP
收集的二十一个实用便利的PHP函数代码
Apr 22 PHP
PHP仿盗链代码
Jun 03 PHP
PHP图片上传代码
Nov 04 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 PHP
简单了解WordPress开发中update_option()函数的用法
Jan 11 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 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中的错误处理和异常处理
2017/02/04 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
JS实现输入框提示文字点击时消失效果
2016/07/19 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
历史学专业毕业生求职信
2013/09/27 职场文书
工艺工程师工作职责
2013/11/23 职场文书
《蜗牛》教学反思
2014/02/18 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
2014高考励志标语
2014/06/05 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
指导教师推荐意见
2015/06/05 职场文书
用Python实现屏幕截图详解
2022/01/22 Python