SQL注入-第二节基本手法
SQL注入是一种安全漏洞,通过它攻击者可以执行意外的SQL命令,或者访问数据库中的敏感信息。以下是一个简单的PHP示例,演示了如何通过直接将用户输入插入到SQL查询中来防止SQL注入:
// 假设我们有一个名为$conn的数据库连接资源
// 假设我们有一个名为$username和$password的用户输入
// 不安全的做法:直接拼接用户输入到SQL查询中
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $sql);
// 检查结果
if (mysqli_num_rows($result) > 0) {
echo "登录成功";
} else {
echo "登录失败";
}
// 安全的做法:使用预处理语句和参数绑定
$stmt = mysqli_prepare($conn, "SELECT * FROM users WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($stmt, 'ss', $username, $password); // 'ss' 表示两个参数都是字符串
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if (mysqli_num_rows($result) > 0) {
echo "登录成功";
} else {
echo "登录失败";
}
// 关闭语句和连接资源
mysqli_stmt_close($stmt);
mysqli_close($conn);
在不安全的做法中,用户输入直接拼接到SQL查询中,攻击者可以通过在输入中插入恶意SQL代码来改变查询的意图。而在安全的做法中,使用了预处理语句和参数绑定,这有助于防止SQL注入,因为用户输入被视为参数值,而不是SQL指令的一部分。
评论已关闭