PHP 魔術引號(Magic Quotes GPC)自動為 GPC 數據添加反斜杠,但實現邏輯缺陷可導致嚴重安全隱患。
<?php
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) {
if ($_key{0} != '_') $$_key = daddslashes($_value);
}
}
// 漏洞觸發點
echo $xigr['hi']; // 預期數組,實際可被字符串覆蓋
?xigr='ryat,經處理變為 \'ryat(字符串)$xigr['hi'] 將字符串當數組訪問,PHP 取首字符 \... WHERE uid IN ('" . implode("','", $uids) . "')?xigr[]='&xigr[][uid]=evilcode 繞過 GPC 保護,實現 SQL 注入addslashes() 導致反斜杠疊加register_globals 風格代碼極易被覆蓋任意變量magic_quotes_gpc = Offis_array() 校驗後再按數組處理現代框架(Laravel、ThinkPHP 等)均已內建完善的輸入處理機制,切勿在項目中手動實現魔術引號邏輯。