|
Discuz 是國(guó)內(nèi)很流行的論壇系統(tǒng),被黑的網(wǎng)站應(yīng)該會(huì)很多吧。不過(guò)我對(duì)入侵別人的網(wǎng)站不感興趣,同時(shí)也鄙視那些代碼都不會(huì)寫只會(huì)使用別人放出的工具攻擊的所謂的“黑客”。
粗略看了一下代碼,這個(gè) SQL 注入漏洞是 urldecode 函數(shù)造成的。在 php 手冊(cè)中,urldecode 函數(shù)下面有一個(gè)警告:
The superglobals $_GET and $_REQUEST are already decoded. Using urldecode() on an element in $_GET or $_REQUEST could have unexpected and dangerous results.
而 Discuz 的開發(fā)人員(估計(jì)是新手)畫蛇添足,多加了一個(gè) urldecode:
復(fù)制代碼 代碼如下:
foreach($_POST as $k => $v) {
$value = urldecode($v);
$this->setParameter($k, $value);
}
單引號(hào)被 urlencode 兩次以后是 %2527,然后 POST,php 內(nèi)部在生成全局變量 $_POST 的時(shí)候會(huì)先 urldecode,得到 %27,然后 php 會(huì)檢查 Magic Quotes 的設(shè)置,但是無(wú)論是否開啟 Magic Quotes,%27 都不會(huì)被 addslashes,因?yàn)檫@時(shí)根本沒(méi)有單引號(hào)。但是這時(shí)如果你在 php 代碼中畫蛇添足的加上 urldecode,%27就變成單引號(hào)了,然后……你懂的。
在我初學(xué) php 的時(shí)候,看的是學(xué)校圖書館的一本爛書,里面根本就沒(méi)寫 php 在處理表單的時(shí)候會(huì)自動(dòng) urldecode,所以自己用 urldecode 函數(shù)來(lái)解碼(依稀記得書上好像也是這么寫的,真是誤人子弟啊)。
總結(jié)一下,就是:1、選擇一本好書非常重要;2、慎用 urldecode 函數(shù)。3、注意 php 手冊(cè)中的警告。
原文來(lái)自 http://demon.tw/programming/php-urldecode-sql-injection.html
php技術(shù):PHP 小心urldecode引發(fā)的SQL注入漏洞,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。