来源:自学PHP网 时间:2015-04-17 13:03 作者: 阅读:次
[导读] 作者: Demon链接: http://demo#8203;#8203;n.tw/programming/php-urldecode-sql-injection.html#8203;Ihipop 学校的Discuz X1.5 论坛被黑,在那里吵了一个下午。Google 一下Discuz! X1-1.5 notify_cr......
作者: Demon
链接: http://demon.tw/programming/php-urldecode-sql-injection.html 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就变成单引号了,然后……你懂的。 www.2cto.com 在我初学PHP 的时候,看的是学校图书馆的一本烂书,里面根本就没写PHP 在处理表单的时候会自动urldecode,所以自己用urldecode 函数来解码(依稀记得书上好像也是这么写的,真是误人子弟啊)。 总结一下,就是:1、选择一本好书非常重要;2、慎用urldecode 函数。3、注意PHP 手册中的警告。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com