PHP如何防止SQL注入攻击?
warning:
这篇文章距离上次修改已过183天,其中的内容可能已经有所变动。
为了防止SQL注入攻击,可以使用预处理语句(prepared statements)和参数化查询,这两者结合可以确保数据与SQL代码分开,从而避免了SQL注入的发生。
以下是使用PDO(PHP Data Objects)扩展来预防SQL注入的示例代码:
try {
// 创建PDO实例
$pdo = new PDO('mysql:host=your_host;dbname=your_db', 'username', 'password');
// 设置错误模式为异常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 准备SQL语句
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
// 绑定参数
$stmt->bindParam(':username', $username);
// 赋值
$username = 'user_input';
// 执行查询
$stmt->execute();
// 获取结果
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 使用结果
foreach ($result as $row) {
// 处理每一行
}
} catch (PDOException $e) {
// 处理异常
echo 'Connection failed: ' . $e->getMessage();
}
在上述代码中,:username
是一个参数,它被绑定到一个PHP变量 $username
。通过使用参数化查询,用户输入的数据不会直接嵌入到SQL语句中,从而防止了SQL注入的风险。如果用户尝试执行恶意SQL代码,这些代码将只被当作普通的参数值处理,不会被数据库认为是真正的SQL指令一部分。
评论已关闭