php - 即使密码或用户名不正确,我的 PHP 登录系统仍在登录
问题描述
即使用户名和密码错误仍然可以登录,即使值为空也可以登录
<?php
$hostname = "localhost";
$username = "root";
$password = "";
$dbname = "login";
$conn = mysqli_connect($hostname, $username, $password, $dbname);
if (!$conn) {
die ("unable to connect");
}
if ($_POST) {
$uname = $_POST ["username"];
$pass = $_POST ["password"];
$sql = "SELECT * FROM users WHERE username = '$uname' AND password = '$pass' LIMIT 1 ";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) == 1){
include("graph.php");
} else {
echo "Incorrect";
}
}
?>
解决方案
首先非常重要的是,您对 SQL 注入攻击持开放态度,因此您应该使用准备好的语句,这是应该如何使用您的代码,但echo "Incorrect";
您应该为每种情况提供不同的答案:
<?php
$hostname = "localhost";
$username = "root";
$password = "";
$dbname = "login";
$conn = mysqli_connect($hostname, $username, $password, $dbname);
if (!$conn) {
die ("unable to connect");
}
if (isset($_POST["username"]) && isset($_POST["password"])) { // Check if you have posted data via POST
$uname = $_POST["username"];
$pass = $_POST["password"];
$sql = "SELECT * FROM users WHERE username = ? AND password = ? LIMIT 1 ";
if($stmt = $conn->prepare($sql)) { // Check for MySQL errors
$stmt->bind_param('ss', $uname, $pass);
if ($stmt->execute()) {
$stmt->close();
include("graph.php");
} else { // There is a problem with your SELECT // bind params
echo "Incorrect";
}
} else { // You should handle mysql errors here
echo "Incorrect";
}
} else { // You don't have POST data
echo "Incorrect";
}
?>
就像@Kuya 注意到你有很多其他问题一样,谷歌有很多关于实现登录系统的教程。
推荐阅读
- node.js - 使用$定位运算符+嵌入式文档+mongodb+nodejs编写复杂的搜索查询
- javascript - 我应该在我的 UI 组件库中的哪里包含 React 作为依赖项?
- angular - 表单数据作为 null 传递,除了角度 4 中的数据更新输入
- javascript - 将组件路由到 d3/event-drops 数据点时的 Angular 6 不会在 Safari 中显示
- php - 在一页中显示特定年份的记录
- javascript - 如果我删除或添加类到某个 jquery 元素,我可以添加一些触发的事件吗?
- rest - Contiki 中的 CoAP Max 交易是什么意思?
- nginx - NGINX 反向代理和 Access-Control-Allow-Origin 问题
- uml - 什么是合适的 UML 类关系?
- docker - dockerfile 添加文件找不到