程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP魔術引號所帶來的安全問題分析

PHP魔術引號所帶來的安全問題分析

編輯:PHP綜合

PHP通過提取魔術引號產生的“\”字符會帶來一定的安全問題,例如下面這段代碼片段:

// foo.php?xigr='ryat
function 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注射漏洞!對此應給與足夠的重視!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved