我正在努力了解SQL注入的原理,以及如何防范它。HTML登录页面包含一个表单,其中有用户名和密码字段以及提交按钮。使用MySQL数据库时,PHP代码如下:
$conn = mysqli_connect($Host, $User, $Password, $DbName);
if (!$conn) {
echo "Database connection error.";
exit;
}
$query = "SELECT user_name, password from visitors where user_name = '".$_POST['user_name']."';";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_assoc($result);
$user_pass = md5($_POST['pass_word']);
$user_name = $row['user_name'];
if(strcmp($user_pass,$row['password']) != 0) {
echo "Login failed";
}
为了防止SQL注入攻击,我正在尝试实现预处理语句。查看了W3S网站和其他网站后,我认为需要替换掉原来的SQL查询语句。
$query="SELECT user_name, password from visitors where user_name='".$_POST['user_name']."';";
使用类似以下的东西:
$stmt = $conn->prepare("SELECT user_name, password from visitors where user_name= ?");
if ($stmt->execute(array($_GET[‘user_name’]))) {
while ($row = $stmt->fetch()) {
$user_name = $row;
}
}
我对修改的有效性感到不确定。 此外,为了测试系统的漏洞是否已得到解决,我应该如何通过原始、未修改的代码访问系统?我尝试过:
username: admin
password: ‘ or ‘1’=’1’ (and a number of other options too)
‘ or ‘1’=’1’
,那么这些被称为卷曲引号,并且会导致解析错误。请使用普通的单引号'
。除非这只是一个错误的粘贴。 - Funk Forty Niner';drop table visitors;--
登录而不是使用用户名admin
登录。 - David