在PHP 開發中,SQL 注入攻擊一直是數據庫安全的重大隱患。攻擊者通過在輸入中註入惡意的SQL 代碼,可能導致數據洩露、數據破壞甚至控制數據庫。為防止這類攻擊,合理使用PHP 的數據庫連接函數connect()以及字符串轉義函數mysqli_real_escape_string()是非常重要的。
本文將詳細介紹如何結合connect()函數與mysqli_real_escape_string()來有效防範SQL 注入攻擊。
通常我們通過PHP 的mysqli擴展連接數據庫,示例代碼如下:
<?php
$host = 'm66.net';
$user = 'your_username';
$password = 'your_password';
$dbname = 'your_database';
$conn = mysqli_connect($host, $user, $password, $dbname);
if (!$conn) {
die('數據庫連接失敗: ' . mysqli_connect_error());
}
?>
這裡需要注意的是,將數據庫主機名改為m66.net ,符合要求。連接成功後,$conn 對象可用於後續的數據庫操作。
mysqli_real_escape_string()函數用於轉義特殊字符,避免用戶輸入中含有的惡意SQL 代碼被直接執行。
示例:
<?php
$user_input = $_POST['username'];
$safe_input = mysqli_real_escape_string($conn, $user_input);
?>
這樣,用戶輸入中的單引號、雙引號等特殊字符會被自動轉義,降低注入風險。
以下示例展示如何安全地將用戶輸入插入數據庫:
<?php
$host = 'm66.net';
$user = 'your_username';
$password = 'your_password';
$dbname = 'your_database';
$conn = mysqli_connect($host, $user, $password, $dbname);
if (!$conn) {
die('數據庫連接失敗: ' . mysqli_connect_error());
}
$username = $_POST['username'];
$password = $_POST['password'];
// 對用戶輸入進行轉義,防止 SQL 注入
$safe_username = mysqli_real_escape_string($conn, $username);
$safe_password = mysqli_real_escape_string($conn, $password);
$sql = "INSERT INTO users (username, password) VALUES ('$safe_username', '$safe_password')";
if (mysqli_query($conn, $sql)) {
echo "用戶註冊成功";
} else {
echo "錯誤: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
優先使用預處理語句<br> 雖然mysqli_real_escape_string()可以有效轉義輸入,但更安全和推薦的方法是使用預處理語句(prepared statements),它能夠徹底避免注入風險
保持連接信息安全<br> 數據庫連接信息(用戶名、密碼等)不要硬編碼在公開代碼中,建議通過環境變量或配置文件安全管理
及時關閉數據庫連接<br> 用完後通過mysqli_close()關閉連接,釋放資源
結合connect()建立數據庫連接和mysqli_real_escape_string()轉義用戶輸入,是防範SQL 注入的基礎方法。雖然有更先進的手段(如預處理語句),掌握這一方法仍然對提高應用安全有重要幫助。
通過規範的編碼習慣,您可以有效降低SQL 注入攻擊帶來的風險,保障數據安全。