|
php通過提取魔術引號產生的“/”字符會帶來一定的安全問題,例如下面這段代碼片段:
// 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 /
上面的代碼原本期望得到一個經過daddslashes()安全處理后的數組變量$xigr['hi'],但是沒有對變量$xigr做嚴格的類型規定,當我們提交一個字符串變量$xigr='ryat,經過上面的處理變為/'ryat,到最后$xigr['hi']就會輸出/,如果這個變量引入到SQL語句,那么就會引起嚴重的安全問題了,對此再來看下面的代碼片段:
...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這樣的構造形式可以很容易的突破GPC或類似的安全處理,形成SQL注射漏洞!對此應給與足夠的重視!
php技術:PHP魔術引號所帶來的安全問題分析,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。