数据库基础安全2

6 阅读1分钟

PHP与MYSQL数据库交互四步

01 建立连接

02 接收输入

03 执行SQL

04 处理结果

<?php
// 第一步:建立数据库连接(拨号)
$db_host = '127.0.0.1';  // 本地数据库地址
$db_user = 'root';       // 数据库账号
$db_pass = 'root';       // 密码
$db_name = 'school';     // 选择的数据库名
$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$conn) {
    die("数据库连接失败: " . mysqli_connect_error());
}
if($_POST){
    // 第二步:接收用户输入(登录页的账号密码)
    $name = $_POST['name'];   // POST方式,因为下面的html代码中是post发送请求的
    $pwd = $_POST['password'];

    // 第三步:执行SQL查询(漏洞根源)
    $sql = "SELECT * FROM users WHERE name='$name' AND password='$pwd'";
    $result = mysqli_query($conn, $sql);

    // 第四步:处理结果(反馈登录状态)
    if (mysqli_num_rows($result) > 0) {
        $user_info = mysqli_fetch_assoc($result);
        echo "登录成功!欢迎你:" . $user_info['name']."你的身份证号是:".$user_info['id_card']."你的手机号是:".$user_info['phone'];
    } else {
        echo "登录失败:用户名或密码错误";
    }
}
// 关闭连接
mysqli_close($conn);
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form method="post">
    用户名:<input type="text" name="name"><br><br>
    密&nbsp;&nbsp;码:<input type="password" name="password"><br><br>
    <button type="submit">登录</button>
</form>
</body>
</html>

说明一下;上面的PHP代码中有用户登陆成功就会将那个用户的信息显示出来,是利用了以下代码:

$sql = "SELECT * FROM users WHERE name='$name' AND password='$pwd'";
$result = mysqli_query($conn, $sql);

如果是用户登陆失败,要显示用户信息用户界面的用户名输入or 1=1 #

相对于将
$sql = "SELECT * FROM users WHERE name='$name' AND password='$pwd'";
改:
$sql = "SELECT * FROM users WHERE name='$name' or 1=1 # AND password='$pwd'";

上面的漏洞是后端代码没有过滤or,所以有漏洞