PHP魔術(shù)引號所帶來的安全問題分析
PHP通過提取魔術(shù)引號產(chǎn)生的“\”字符會帶來一定的安全問題,例如下面這段代碼片段:
// 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 \
上面的代碼原本期望得到一個經(jīng)過daddslashes()安全處理后的數(shù)組變量$xigr['hi'],但是沒有對變量$xigr做嚴格的類型規(guī)定,當我們提交一個字符串變量$xigr='ryat,經(jīng)過上面的處理變?yōu)閈'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這樣的構(gòu)造形式可以很容易的突破GPC或類似的安全處理,形成SQL注射漏洞!對此應(yīng)給與足夠的重視!
相關(guān)文章
如何使用Linux的Crontab定時執(zhí)行PHP腳本的方法
我們的PHP程序有時候需要定時執(zhí)行,我們可以使用ignore_user_abort函數(shù)或是在頁面放置js讓用戶幫我們實現(xiàn)。但這兩種方法都不太可靠,不穩(wěn)定。我們可以借助Linux的Crontab工具來穩(wěn)定可靠地觸發(fā)PHP執(zhí)行任務(wù)2011-12-12
PHP獲取數(shù)據(jù)庫表中的數(shù)據(jù)插入新的表再原刪除數(shù)據(jù)方法
在本篇文章中我們給大家分享了關(guān)于PHP獲取要刪除數(shù)據(jù)庫表中的數(shù)據(jù)插入新的表再原刪除數(shù)據(jù)的詳細方法和相關(guān)代碼,需要的朋友們參考下。2018-10-10
PHP+APACHE實現(xiàn)網(wǎng)址偽靜態(tài)
這篇文章主要介紹了PHP+APACHE通過使用mod rewrite模塊實現(xiàn)網(wǎng)址偽靜態(tài)的相關(guān)資料,需要的朋友可以參考下2015-02-02

