<?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()); // 连接失败时终止并显示错误
}
// 检查是否有POST请求提交
if($_POST){
// 获取表单提交的用户名和密码
$name = $_POST['name'];
$pwd = $_POST['password'];
// 构造SQL查询语句(存在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"> <!-- 使用POST方法提交 -->
用户名:<input type="text" name="name"><br><br> <!-- 用户名输入框 -->
密 码:<input type="password" name="password"><br><br> <!-- 密码输入框 -->
<button type="submit">登录</button> <!-- 提交按钮 -->
</form>
</body>
</html>
这两段代码就是用户登录时,验证用户密码是否与数据库里的数据是否一致的作用。
当用户在前端输入自己的账户和密码时,会用全局变量$_POST接收这组数据:
$_POST{
[name] = "xixi"
[password] = "123" }
这组数据可以交给后端去验证,后端是没有数据库的,这时可以通过$conn = mysqli_connect('127.0.0.1','root','root','school')去让php与数据库建立链接。
然后通过if语句来检验$_POST['name']和$_POST['password']这两个字符串。并把他们分别赋值给$name和$pwd
其中sql语句
select * from school.user where name=`$name` AND password=`$pwd`;
这只能看数据库里有没有这一组数据,是无法验证其是不是我的用户,还得通过if语句继续判断这一句sql语句,返回的表单是否不为空就行了。
但是这一sql语句是有漏洞的,比如用户$_POST['password']里输入的是
` or `1`=`1
那么它就会变成这一sql语句:
select * from school.user where name=`$name` AND password=`` or `1`=`1`;
这样的话就会让and失效,去执行or后面的`1`=`1`。显然1=1是真那么数据库会把所有用户返回给php,即mysqli_num_rows($result)肯定大于0,也就是用户随便输入就能登录进去。

3416

被折叠的 条评论
为什么被折叠?



