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

PHP 數據過濾與安全處理完整指南

     編輯:PHP 相關知識

PHP 數據過濾與安全處理完整指南

在 PHP 開發中,數據過濾是確保應用安全的關鍵環節。無論是防止 SQL 注入、跨站腳本攻擊 (XSS),還是處理用戶輸入,正確的過濾策略能有效降低安全風險。本文將系統介紹 PHP 中常用的數據過濾函數、最佳實踐及實戰代碼示例。

核心過濾原則

  1. 入庫前過濾:使用 addslashes() 轉義特殊字符,或針對整數類型採用 intval() 強制轉換,可有效防禦 SQL 注入。
  2. 配置層面防護:在 php.ini 中開啟 magic_quotes_gpc 和 magic_quotes_runtime(注意:PHP 5.4+ 已移除此特性,建議改用預處理語句)。
  3. 系統命令執行:調用系統函數時,務必使用 escapeshellarg() 和 escapeshellcmd() 對參數進行轉義。
  4. 輸出編碼防 XSS:使用 htmlspecialchars() 或 strip_tags() 將用戶提交的 HTML/PHP 標簽轉換為無害實體字符。
  5. 文件操作安全:對 include()、unlink()、fopen() 等涉及文件系統的函數,嚴格驗證傳入參數,避免目錄遍歷漏洞。

簡易過濾流程

// 入庫處理
$str = trim($input);
$str = addslashes($str);

// 出庫處理
$str = stripslashes($str);

// 顯示輸出
echo htmlspecialchars(nl2br($str));

控制器模式與白名單機制

採用分發腳本(如 dispatch.php)集中處理請求,確保安全檢查不被繞過。結合白名單機制,僅允許預期的字段通過驗證:

$allowed = ['form', 'username', 'password'];
$sent = array_keys($_POST);
if ($allowed === $sent) {
    include '/inc/logic/process.inc';
}

常見數據類型驗證示例

郵箱驗證


整數與浮點數驗證

 $v) $array[$k] = sec($v);
    } elseif (is_string($array)) {
        $array = addslashes($array);
    } elseif (is_numeric($array)) {
        $array = intval($array);
    }
    return $array;
}

// 整型檢查
function num_check($id) {
    if (!$id || inject_check($id) || !is_numeric($id)) die('非法參數');
    return intval($id);
}

// 字符檢查
function str_check($str) {
    if (inject_check($str)) die('非法參數');
    return htmlspecialchars($str);
}

// SQL 關鍵字過濾
function inject_check($sql_str) {
    return preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile/i', $sql_str);
}

表單處理流程總結

典型流程:addslashes → htmlspecialchars → mysql_real_escape_string(配合預處理語句更佳)。數值類型優先用 intval(),建議在入口文件統一循環處理 $_POST/$_GET。

數據過濾實戰片段


掌握上述過濾技巧,配合現代框架的 ORM 和參數綁定功能,能構建更健壯的 PHP 應用。

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