首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 入門

MySQL SQL 注入防護完整指南

     編輯:MySQL 入門

什麼是 SQL 注入

攻擊者透過 Web 表單、URL 參數等輸入惡意 SQL 片段,欺騙伺服器執行非預期指令(如刪除資料、竊取機密資訊)。

核心防護原則

  1. 永不信任使用者輸入:所有輸入視為不安全,必須驗證、過濾、轉義。
  2. 使用參數化查詢或預存程序:避免動態拼接 SQL 字串。
  3. 最小權限原則:應用程式使用專屬、低權限資料庫帳號。
  4. 敏感資料加密儲存:密碼採用雜湊(如 bcrypt)、機密資訊加密。
  5. 錯誤訊息最小化:不向前端暴露資料庫結構或堆疊追蹤。
  6. 定期掃描與防護:使用 SQL 注入掃描工具(如 jSky、MDCSOFT-IPS)偵測弱點。

PHP 防注入實作範例

1. 輸入驗證與轉義

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) {
    $result = mysql_query("SELECT * FROM users WHERE username='$matches[0]'");
} else {
    echo "username 輸入異常";
}

2. 使用 mysql_real_escape_string

if (get_magic_quotes_gpc()) {
    $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='$name'");

LIKE 查詢中的特殊字元處理

使用者輸入含 _ 或 % 會導致模糊比對異常,需用 addcslashes 轉義:

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub 變為 \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes(string, characters) 會在指定字元前加上反斜線。

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