PHP 小心urldecode引发的SQL注入漏洞
作者:bea
Ihipop 学校的 Discuz X1.5 论坛被黑,在那里吵了一个下午。Google 一下“Discuz! X1-1.5 notify_credit.php Blind SQL injection exploit”,你就知道。 Discuz 是国内很流行的论坛系统,被黑的网站应该会很多吧。不过我对入侵别人的网站不感兴趣,同时也鄙视那些代码都不会写只会使用别人放出的工具攻击的所谓的“黑客”。 粗略看了一下代码,这个 SQL 注入漏洞是 urldecode 函数造成的。在 P
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
有用 | 无用
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数组函数序列之rsort() - 对数组的元素值进行降序排序
- 使用PHPRPC实现Ajax安全登录
- 求PHP数组最大值,最小值的代码
- php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
- php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
- php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
- php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
- php数组函数序列之array_values() 获取数组元素值的函数与方法
- php数组函数序列之array_keys() - 获取数组键名
- php数组函数序列之array_combine() - 数组合并函数使用说明
- php数组函数序列之in_array() 查找数组值是否存在
- php数组函数序列之array_unique() - 去除数组中重复的元素值
- php数组函数序列之array_sum() - 计算数组元素值之和
- php数组函数序列之array_key_exists() - 查找数组键名是否存在
- php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
- php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
- 让Json更懂中文(JSON_UNESCAPED_UNICODE)
- PHP实现异步调用方法研究与分享
- 提示Trying to clone an uncloneable object of class Imagic的解决