在LNMP(Linux, Nginx, MySQL, PHP)架構中,防止SQL注入是確保應用程序安全的重要部分。以下是一些防止SQL注入的最佳實踐:
使用預處理語句(Prepared Statements):
// 使用PDO
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password');
$stmt->execute(['username' => $username, 'password' => $password]);
$user = $stmt->fetch();
// 使用MySQLi
$mysqli = new mysqli('localhost', 'username', 'password', 'your_database');
$stmt = $mysqli->prepare('SELECT * FROM users WHERE username = ? AND password = ?');
$stmt->bind_param('ss', $username, $password);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
使用ORM(對象關系映射):
輸入驗證和過濾:
filter_var()
進行過濾。$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
使用安全的密碼存儲:
password_hash()
和password_verify()
函數來處理密碼哈希和驗證。// 哈希密碼
$hashed_password = password_hash($password, PASSWORD_BCRYPT);
// 驗證密碼
if (password_verify($password, $hashed_password)) {
// 密碼正確
}
限制數據庫權限:
使用Web應用防火墻(WAF):
定期更新和修補:
通過遵循這些最佳實踐,可以顯著降低SQL注入攻擊的風險,保護應用程序的安全。