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

MySQL 輸入安全防禦:SQL 注入防範、最小權限、審計日誌實戰

     編輯:MySQL 綜合教學

核心防禦原則

  1. 參數化查詢:使用 PreparedStatement / PDO 綁定參數,絕不拼接 SQL 字串。
  2. 最小權限:應用帳號僅授予必要表的 DML 權限,禁止 DDL、GRANT、FILE 等高危權限。
  3. 輸入驗證與轉義:PHP 使用 mysqli_real_escape_string() 或 PDO::quote(),但以參數化為首選。

伺服器層面安全配置

1. 關閉遠程連線埠

# my.cnf [mysqld]
skip-networking
# 或 bind-address=127.0.0.1

本地連線改用 Unix Socket (mysql.sock),效能更高且無網路暴露。

2. 禁用 LOAD DATA LOCAL INFILE

# my.cnf [mysqld]
local-infile=0

防止攻擊者讀取伺服器任意檔案 (如 /etc/passwd)。

3. 修改 Root 帳號與密碼

# 重新命名 root
UPDATE mysql.user SET User='custom_admin' WHERE User='root';
# 設定強密碼
SET PASSWORD FOR 'custom_admin'@'localhost' = PASSWORD('StrongP@ssw0rd!');
# 刪除匿名帳號、測試庫
DELETE FROM mysql.user WHERE User='';
DROP DATABASE test;
FLUSH PRIVILEGES;

4. 禁止 Root 遠程登入

UPDATE mysql.user SET Host='localhost' WHERE User='custom_admin';
FLUSH PRIVILEGES;

5. 清理歷史指令記錄

cat /dev/null > ~/.bash_history
cat /dev/null > ~/.mysql_history
ln -sf /dev/null ~/.bash_history
ln -sf /dev/null ~/.mysql_history

避免明文密碼殘留在 .bash_history、.mysql_history。

6. 檔案系統權限鎖定

chown -R mysql:mysql /var/lib/mysql
chmod -R go-rwx /var/lib/mysql

防止本地用戶直接複製資料檔繞過 MySQL 權限。

7. 啟用審計日誌

  • 企業版:audit_log 外掛。
  • 社區版:MariaDB Audit Plugin 或 McAfee MySQL Audit。
  • 記錄:登入/登出、DDL/DML、失敗嘗試。

應用層最佳實務

  • 所有動態 SQL 使用參數化,拒絕字串拼接。
  • ORM 框架 (Hibernate, MyBatis, Entity Framework) 內建參數化,正確使用。
  • 錯誤訊息不回傳堆疊追蹤給前端,統一記錄日誌並回傳通用錯誤碼。
  • 定期掃描慢查詢日誌與錯誤日誌,發現異常注入嘗試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved