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

PHP+MySQL SQL 注入防禦指南:常見攻擊向量與防護措施

     編輯:PHP 綜合知識

前言

SQL 注入是 Web 應用程式中最常見也最危險的安全漏洞之一。攻擊者透過在輸入欄位植入惡意 SQL 片段,竊取、篡改甚至刪除資料庫資料。本文整理常見的 SQL 注入攻擊手法,並說明對應的防禦策略,協助開發者建立安全的 PHP+MySQL 應用程式。

常見注入手法分析

1. 探測欄位數量與位置

攻擊者常使用 ORDER BY 子句逐步增加數字,直到頁面報錯,以此判斷查詢結果的欄位數。另一種手法是利用 UNION SELECT 配合遞增數字,觀察哪個位置會回顯在頁面上,確認可利用的欄位位置。

2. 利用內建函數洩露資訊

MySQL 內建函數如 version()、database()、user() 等,若被注入到查詢中,會直接洩露資料庫版本、當前資料庫名稱及連線使用者帳號。此外,查詢 @@global.version_compile_os 可取得作業系統資訊,而 ord(mid(user(),1,1)) 可推測是否為 root 權限。

3. 透過 information_schema 列舉結構

MySQL 5.0 以上版本內建 information_schema 資料庫,儲存所有資料庫、資料表與欄位的中繼資料。攻擊者可透過 UNION SELECT 查詢 SCHEMATA、TABLES、COLUMNS 表,逐步列舉目標資料庫結構。

4. 讀取敏感檔案與寫入 Web Shell

若資料庫帳號擁有 FILE 權限,攻擊者可使用 LOAD_FILE() 讀取伺服器上的敏感檔案(如 /etc/passwd、httpd.conf、php.ini 等),或利用 INTO OUTFILE 寫入惡意 PHP 腳本(Web Shell)獲取伺服器控制權。

5. 編碼衝突繞過

當前後端編碼不一致導致 Illegal mix of collations 錯誤時,攻擊者可能使用 UNHEX(HEX(...)) 繞過限制,繼續執行注入。

核心防禦策略

  1. 使用預處理語句:採用 PDO 或 MySQLi 的參數化查詢,將資料與 SQL 邏輯徹底分離,是防禦注入最有效的方法。
  2. 最小權限原則:資料庫帳號僅授予必要權限,嚴禁使用 root 連線,並移除 FILE、SHUTDOWN 等高危權限。
  3. 輸入驗證與過濾:雖然參數化查詢已足夠,但仍建議對使用者輸入進行型別檢查、長度限制及白名單驗證。
  4. 錯誤訊息隱藏:生產環境關閉詳細的 SQL 錯誤回顯,避免洩露資料庫結構資訊。
  5. Web 應用程式防火牆 (WAF):部署 WAF 規則攔截常見注入特徵,作為纵深防禦補充。
  6. 定期審計與更新:定期進行代碼安全審計,及時修補框架與元件的已知漏洞。

結語

理解攻擊手法是為了更好地防禦。開發者應將安全意識貫穿於開發全生命週期,採用參數化查詢作為核心防線,輔以最小權限、錯誤處理等措施,構建強健的 PHP+MySQL 應用程式。

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