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

PHP SQL注入攻擊原理深度解析與防範實戰

     編輯:PHP 綜合知識

SQL注入仍是 Web 應用頭號安全威脅。本文從原理、攻擊步驟、實戰演示到防範體系,構建完整知識體系。

攻擊原理與步驟

  1. 尋找注入點:識別未經過濾直接拼接進 SQL 的用戶輸入參數(GET/POST/Cookie/Header)
  2. 構造惡意載荷:利用 SQL 語法特性(註釋、聯集、子查詢、布爾盲注、時間盲注)改變原語句邏輯
  3. 執行與提取:新 SQL 被數據庫執行,導致數據洩露、篡改、刪除、提權甚至 RCE

SQL注入攻擊流程圖

實戰演示:留言板漏洞

數據庫結構

CREATE TABLE `postmessage` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `subject` varchar(60) NOT NULL DEFAULT '',
  `name` varchar(40) NOT NULL DEFAULT '',
  `email` varchar(25) NOT NULL DEFAULT '',
  `question` mediumtext NOT NULL,
  `postdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 COMMENT='用戶留言';

脆弱代碼

<?php
// show.php
$id = $_GET['id']; // 無任何過濾!
$sql = "SELECT * FROM postmessage WHERE id = $id";
$result = mysql_query($sql);
// ...
?>

攻擊驗證

# 正常請求
https://example.com/show.php?id=71

# 永真條件測試
https://example.com/show.php?id=71 and 1=1
# 返回正常 → 存在注入點

# 永假條件測試
https://example.com/show.php?id=71 and 1=2
# 返回空/報錯 → 確認注入

# 聯集注入探測字段數
https://example.com/show.php?id=71 UNION SELECT 1,2,3,4,5,6

防範體系:纵深防御

1. 參數化查詢(核心防線)

<?php
// PDO 範例
$stmt = $pdo->prepare("SELECT * FROM postmessage WHERE id = ?");
$stmt->execute([$_GET['id']]);
$data = $stmt->fetch();

// MySQLi 範例
$stmt = $mysqli->prepare("SELECT * FROM postmessage WHERE id = ?");
$stmt->bind_param("i", $_GET['id']);
$stmt->execute();
?>

原理:SQL 模板與數據分離傳輸,數據庫引擎解析模板時不會將數據視為 SQL 片段。

2. 輸入驗證與類型強制

$id = (int)$_GET['id']; // 強制整型
if (!ctype_digit($_GET['id'])) exit('非法參數');

3. 最小權限原則

  • Web 賬號僅擁有 SELECT/INSERT/UPDATE 權限,禁止 DROP/ALTER/FILE
  • 禁用 LOAD DATA INFILE、INTO OUTFILE

4. 錯誤信息隱藏

ini_set('display_errors', 0);
error_reporting(E_ALL & ~E_NOTICE);
// 生產環境記錄日誌而非顯示

5. WAF/IDS 二線防禦

  • ModSecurity 規則集攔截常見攻擊特徵
  • 應用層日誌審計異常查詢模式

總結

SQL注入本質是代碼與數據未分離。參數化查詢是銀彈,配合最小權限、錯誤隱藏、審計監控構建纵深防御體系。永遠不要信任任何外部輸入,是安全開發的鐵律。

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