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

PHP 安全獲取全局變量的通用函數封裝

     編輯:PHP 相關知識

直接使用 $_GET、$_POST、$_REQUEST 存在安全隱患(XSS、SQL 注入風險)。封裝一個通用函數,統一進行存在性檢查與輸出轉義,是基礎防護的第一步。

核心代碼實現

<?php
function cleanGlobal($key, $source = 'GPC', $default = '', $htmlEscape = true) {
    $sources = array('G' => '_GET', 'P' => '_POST', 'C' => '_COOKIE', 'R' => '_REQUEST');
    $source = strtoupper($source);
    
    foreach (str_split($source) as $char) {
        if (isset($sources[$char]) && isset($GLOBALS[$sources[$char]][$key])) {
            $value = $GLOBALS[$sources[$char]][$key];
            return $htmlEscape ? htmlspecialchars($value, ENT_QUOTES, 'UTF-8') : $value;
        }
    }
    return $default;
}

// 使用示例
$userId = cleanGlobal('id', 'GP', 0, false); // 從 GET/POST 獲取 id,不轉義,默認 0
$keyword = cleanGlobal('kw'); // 從 GPC 獲取 kw,默認轉義 HTML 實體
?>

關鍵點解析

  • 多源優先級: 支持指定檢查順序(如 'GP' 先 GET 後 POST),靈活適應業務邏輯。
  • key_exists / isset 判斷: 避免未定義索引提示 Notice 錯誤。
  • htmlspecialchars 防 XSS: 默認開啟 HTML 實體轉義(ENT_QUOTES 雙引號也轉義),編碼指定 UTF-8,輸出到 HTML 上下文安全。
  • 可選關閉轉義: 獲取用於數據庫查詢、API 參數等非 HTML 上下文的數據時,可關閉轉義,由後續專用函數處理(如預處理語句)。

擴展建議

  • 集成類型轉換:intval、floatval、trim、strip_tags 等過濾器鏈。
  • 添加長度限制、正則驗證、白名單過濾等高級規則。
  • 配合 CSRF Token 驗證、SQL 預處理、CSP 頭部策略,構建纵深防御體系。

參考手冊:htmlspecialchars | key_exists

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved