|
php通過提取魔術(shù)引號產(chǎn)生的“/”字符會帶來一定的安全問題,例如下面這段代碼片段:
// foo.php?xigr='ryatfunction daddslashes($string, $force = 0) {!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());if(!MAGIC_QUOTES_GPC || $force) {if(is_array($string)) {foreach($string as $key => $val) {$string[$key] = daddslashes($val, $force);}} else {$string = addslashes($string);}}return $string;}...foreach(array('_COOKIE', '_POST', '_GET') as $_request) {foreach($$_request as $_key => $_value) {$_key{0} != '_' && $$_key = daddslashes($_value);}}echo $xigr['hi'];// echo /
上面的代碼原本期望得到一個(gè)經(jīng)過daddslashes()安全處理后的數(shù)組變量$xigr['hi'],但是沒有對變量$xigr做嚴(yán)格的類型規(guī)定,當(dāng)我們提交一個(gè)字符串變量$xigr='ryat,經(jīng)過上面的處理變?yōu)?'ryat,到最后$xigr['hi']就會輸出/,如果這個(gè)變量引入到SQL語句,那么就會引起嚴(yán)重的安全問題了,對此再來看下面的代碼片段:
...if($xigr) {foreach($xigr as $k => $v) {$uids[] = $v['uid'];}$query = $db->query("SELECT uid FROM users WHERE uid IN ('".implode("','", $uids)."')");
利用上面提到的思路,通過提交foo.php?xigr[]='&xigr[][uid]=evilcode這樣的構(gòu)造形式可以很容易的突破GPC或類似的安全處理,形成SQL注射漏洞!對此應(yīng)給與足夠的重視!
php技術(shù):PHP魔術(shù)引號所帶來的安全問題分析,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。