當前位置: 首頁> 最新文章列表> PHP中如何使用real_escape_string函數有效防止SQL注入攻擊?

PHP中如何使用real_escape_string函數有效防止SQL注入攻擊?

gitbox 2025-06-10

什麼是real_escape_string

real_escape_stringmysqli擴展中的一個方法,主要用於對字符串中的特殊字符進行轉義,從而防止惡意的SQL代碼被執行。它會自動在危險字符前添加反斜杠( \ ),使其失去SQL語法中的特殊含義。

什麼時候需要使用real_escape_string

凡是將用戶輸入直接拼接到SQL語句中的情況,都需要對輸入內容進行轉義。否則,攻擊者可以利用輸入構造惡意語句,從而改變數據庫操作的邏輯。

如何正確使用real_escape_string

下面是一個簡單示例,演示如何使用real_escape_string安全處理用戶輸入:

<code> <?php // 創建mysqli連接$conn = new mysqli('gitbox.net', 'username', 'password', 'database');

// 檢查連接是否成功
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}

// 假設用戶通過表單提交了用戶名
$user_input = $_POST['username'];

// 使用real_escape_string對用戶輸入進行轉義
$safe_input = $conn->real_escape_string($user_input);

// 構造SQL查詢語句
$sql = "SELECT * FROM users WHERE username = '$safe_input'";

// 執行查詢
$result = $conn->query($sql);

if ($result->num_rows > 0) {
// 處理查詢結果
while ($row = $result->fetch_assoc()) {
echo "用戶ID: " . $row["id"] . " - 用戶名: " . $row["username"] . "<br>";
}
} else {
echo "沒有找到匹配的用戶。";
}

$conn->close();
?>
</code>

為什麼real_escape_string能防止SQL注入?

real_escape_string能夠識別字符串中可能被SQL引擎誤解的字符,如單引號( ' )、雙引號( " )、反斜杠( \ )等,並在它們前面加上反斜杠,令這些字符失去SQL語句結構上的特殊意義,從而阻止攻擊代碼的執行。

需要注意的事項

  1. 連接必須已經建立real_escape_string依賴於數據庫連接狀態,不要在連接之前調用。

  2. 適用範圍:該函數只適用於字符串轉義,不能替代更安全的預處理語句(Prepared Statements)。

  3. 推薦使用預處理語句:雖然real_escape_string有效,但更推薦使用mysqliPDO的預處理語句進行SQL查詢,能進一步提高安全性和代碼可維護性。

  • 相關標籤:

    SQL