SQL注入是一种常见的Web安全漏洞,攻击者通过在用户输入中插入恶意SQL代码,欺骗服务器执行非授权的数据库操作。这种攻击可能导致数据泄露、数据篡改甚至整个系统被控制。
PDO(PHP Data Objects)是PHP中最推荐的数据库操作方式:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $userInput]);
$results = $stmt->fetchAll();
如果使用MySQLi扩展:
$mysqli = new mysqli('localhost', 'username', 'password', 'test');
$stmt = $mysqli->prepare('SELECT * FROM users WHERE email = ?');
$stmt->bind_param('s', $userInput);
$stmt->execute();
对所有用户输入进行严格验证:
// 邮箱验证
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// 处理无效输入
}
// 数字验证
if (!is_numeric($id)) {
// 处理无效输入
}
数据库用户应只拥有必要的最小权限,避免使用root账户连接数据库。
禁止向用户显示详细的数据库错误信息:
// 生产环境中关闭错误显示
ini_set('display_errors', 'Off');
防止SQL注入的关键是始终使用预处理语句,结合严格的输入验证和最小权限原则。定期进行安全审计和代码审查也是确保应用安全的重要措施。