首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 5 中 $_SERVER 不再受 magic_quotes_gpc 保護的兼容處理方案

     編輯:PHP 綜合知識

問題背景

PHP 5.4 移除 magic_quotes_gpc,導致 $_SERVER 等超全局變量不再自動轉義,舊代碼依賴自動轉義會產生安全隱患。

兼容處理代碼

<?php
$magic_quotes_gpc = get_magic_quotes_gpc();
@extract(daddslashes($_COOKIE));
@extract(daddslashes($_POST));
@extract(daddslashes($_GET));
if (!$magic_quotes_gpc) {
    $_FILES = daddslashes($_FILES);
}

// 遞歸轉義函數
function daddslashes($string) {
    if (!is_array($string)) return addslashes($string);
    foreach ($string as $key => $val) {
        $string[$key] = daddslashes($val);
    }
    return $string;
}
?>

原理解析

  • get_magic_quotes_gpc() 獲取配置狀態(已棄用,PHP 7+ 恒返回 false)。
  • 若關閉,手動對 $_GET/POST/COOKIE/FILES 遞歸執行 addslashes。
  • @extract 將轉義後的數組導入當前符號表(舊風格,現不推薦)。

現代最佳實踐

  1. **關閉** magic_quotes_gpc(PHP 5.4+ 預設關閉)。
  2. 使用 **預處理語句** 或 **PDO 參數綁定**,徹底杜絕 SQL 注入,無需手動轉義。
  3. 輸出到 HTML 時用 htmlspecialchars 防 XSS。
  4. 輸出到 JavaScript/URL 時用對應編碼函數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved