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

PHP 防範 SQL 注入攻擊的核心策略與代碼實踐

     編輯:PHP 綜合知識

SQL 注入原理

攻擊者利用未過濾的用戶輸入,拼接惡意 SQL 片段,竊取、篡改或刪除數據庫數據。典型案例:

<?php
$q = "SELECT id FROM users WHERE username='". $_GET['username'] ."' AND password='". $_GET['password'] ."'";
?>

輸入 ' ; SHOW TABLES; -- 即可列出所有表;輸入 '; DROP TABLE users; -- 可刪除表。

防範三大支柱

1. 使用預處理語句(最推薦)

<?php
$stmt = $pdo->prepare("SELECT id FROM users WHERE username=? AND password=?");
$stmt->execute([$_POST['username'], $_POST['password']]);

PDO 或 MySQLi 預處理徹底分離代碼與數據,從根源杜絕注入。

2. 嚴格過濾與轉義(次選)

  • mysqli_real_escape_string():轉義特殊字符。
  • intval()、(int):強制數值類型。
  • 白名單驗證:僅允許預期格式的輸入。
<?php
$username = mysqli_real_escape_string($link, $_GET['username']);
$password = mysqli_real_escape_string($link, $_GET['password']);
$q = "SELECT id FROM users WHERE username='$username' AND password='$password'";

3. 限制資料庫權限

  • 應用使用的資料庫帳號僅授予必要權限(SELECT、INSERT、UPDATE),禁止 DROP、TRUNCATE、GRANT 等高危操作。
  • 敏感操作走獨立高權限帳號,並加強審計。

進階建議

  1. 使用成熟框架(Laravel、ThinkPHP 等)內建的 ORM/Query Builder,自動處理參數綁定。
  2. 啟用 WAF(Web 應用防火牆)如 ModSecurity。
  3. 定期進行代碼審計與滲透測試。
  4. 錯誤訊息不回顯給前端,避免洩露表結構。

總結

「預處理語句 + 最小權限 + 輸入驗證」是防禦 SQL 注入的鐵三角。切勿僅依賴單一手段,分層防護才能構建安全防線。

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