PHP 小心urldecode引發(fā)的SQL注入漏洞
Discuz 是國(guó)內(nèi)很流行的論壇系統(tǒng),被黑的網(wǎng)站應(yīng)該會(huì)很多吧。不過我對(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:
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í)根本沒有單引號(hào)。但是這時(shí)如果你在 PHP 代碼中畫蛇添足的加上 urldecode,%27就變成單引號(hào)了,然后……你懂的。
在我初學(xué) PHP 的時(shí)候,看的是學(xué)校圖書館的一本爛書,里面根本就沒寫 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
相關(guān)文章
PHP細(xì)數(shù)實(shí)現(xiàn)提高并發(fā)能力的方法
這篇文章主要介紹了PHP提高并發(fā)能力有哪些方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08php class中public,private,protected的區(qū)別以及實(shí)例分析
本篇文章是對(duì)php class中public,private,protected的區(qū)別以及實(shí)例進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP 使用header函數(shù)設(shè)置HTTP頭的示例解析 表頭
本篇文章是對(duì)PHP使用header函數(shù)設(shè)置HTTP頭的示例進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP中4個(gè)加速、緩存擴(kuò)展的區(qū)別和選用建議
這篇文章主要介紹了PHP中eAccelerator、memcached、xcache、APC等4個(gè)加速、緩存擴(kuò)展的區(qū)別和選用建議,需要的朋友可以參考下2014-03-03php數(shù)組函數(shù)序列之ksort()對(duì)數(shù)組的元素鍵名進(jìn)行升序排序,保持索引關(guān)系
ksort() 函數(shù)按照鍵名對(duì)數(shù)組升序排序,為數(shù)組值保留原來(lái)的鍵??蛇x的第二個(gè)參數(shù)包含附加的排序標(biāo)志2011-11-11PHP中$GLOBALS[''HTTP_RAW_POST_DATA'']和$_POST的區(qū)別分析
這篇文章主要介紹了PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的區(qū)別,結(jié)合具體實(shí)例形式分析了$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的功能與使用過程中的區(qū)別,需要的朋友可以參考下2017-07-07PHP實(shí)現(xiàn)上一篇下一篇的方法實(shí)例總結(jié)
這篇文章主要介紹了PHP實(shí)現(xiàn)上一篇下一篇的方法,結(jié)合實(shí)例形式總結(jié)分析了php獲取上一篇下一篇文章SQL操作的相關(guān)查詢技巧,需要的朋友可以參考下2016-09-09