PHP 小心urldecode引发的SQL注入漏洞

2015-01-24信息快讯网

在我初学 PHP 的时候,看的是学校图书馆的一本烂书,里面根本就没写 PHP 在处理表单的时候会自动 urldecode,所以自己用 urldecode 函数来解码

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
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
LotusPhp笔记之:基于ObjectUtil组件的使用分析
LotusPhp笔记之:Cookie组件的使用详解
在PHP中设置、使用、删除Cookie的解决方法
基于Zend的Config机制的应用分析
PHP5中Cookie与 Session使用详解
php中get_headers函数的作用及用法的详细介绍
使用php get_headers 判断URL是否有效的解决办法
php 模拟get_headers函数的代码示例
Eclipse中php插件安装及Xdebug配置的使用详解
关于shopex同步ucenter的redirect问题,导致script不运行
PHP Directory 函数的详解
利用PHP扩展vld查看PHP opcode操作步骤
PHP5.4中json_encode中文转码的变化小结
PHP基础教程(php入门基础教程)一些code代码
PHP gbk环境下json_dencode传送来的汉字
PHP 之Section与Cookie使用总结
apache+codeigniter 通过.htcaccess做动态二级域名解析
提示Trying to clone an uncloneable object of class Imagic的解决
Session保存到数据库的php类分享
Array of country list in PHP with Zend Framework
linux iconv方法的使用
linux系统上支持php的 iconv()函数的方法
php json_encode奇怪问题说明
php中json_encode中文编码问题分析
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
php的urlencode()URL编码函数浅析
PHP header函数分析详解
PHP源码之explode使用说明
php max_execution_time执行时间问题
php array_intersect比array_diff快(附详细的使用说明)
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
关于PHP中Object对象的笔记分享
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE eval()'d code error
©2014-2024 dbsqp.com