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

PHP 防止 SQL 注入有效處理:mysql_real_escape_string 與 addslashes 實戰

     編輯:PHP 相關知識

核心防禦函數對比

1. mysql_real_escape_string() —— 最佳選擇

$con = mysqli_connect("localhost","user","pass","db");
$safe = mysqli_real_escape_string($con, $_POST['user']);
$sql = "SELECT * FROM users WHERE user='$safe'";

優點:考慮連線字符集、專為 MySQL 設計、可安全用於 mysqli_query()。

2. addslashes() —— 通用轉義

$str = "Is your name O'reilly?";
echo addslashes($str); // Is your name O\'reilly?

注意:若 magic_quotes_gpc=On 已自動轉義,再呼叫會雙重轉義。需先檢查:

if (!get_magic_quotes_gpc()) $str = addslashes($str);

3. stripslashes() 移除反斜線

echo stripslashes("Who\'s John Adams?"); // Who's John Adams?

實戰攻擊示範

$_POST['user'] = 'john';
$_POST['pwd'] = "' OR ''='";
// 無過濾時 SQL 變為:WHERE user='john' AND password='' OR ''=''
// 任意密碼皆可登入

現代最佳實踐

請直接使用 PDO 或 MySQLi 預處理語句,完全避免手動轉義:

$stmt = $pdo->prepare("SELECT * FROM users WHERE user=? AND pwd=?");
$stmt->execute([$_POST['user'], $_POST['pwd']]);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved