我正在用PHP创建用户访问级别。我写了一些它工作的代码,并将用户重定向到各自的页面,但我不确定这是否是一种安全的方式。
if(filter_has_var(INPUT_POST, "signin")){
$firstname = $_POST["firstname"];
$password_1 = $_POST["password_1"];
$sql = "SELECT * FROM users WHERE firstname = :firstname";
$stmt = $conn->prepare($sql);
$stmt->execute(["firstname" => $firstname]);
$res = $stmt->fetch();
$password = $res["password_1"];
if(password_verify($password_1, $password)){
// USER ACCESS LEVEL
if($res["user_type"] == "student"){
$_SESSION["username"] = $firstname;
header("location: index_s.php?type=student");
} else if ($res["user_type"] == "teacher"){
$_SESSION["username"] = $firstname;
header("location: index_t.php");
} else {
$_SESSION["username"] = $firstname;
header("location: index.php");
}
} else {
array_push($errors, "Invalid username/password entered!");
}
}
我的用户表中有一个user_type列,其中用户在注册时识别他是哪种类型的用户,并且基于他们在登录时被重定向到各自的页面。但是,这段代码有效,但我认为这不是正确的这样做的方式。我需要您的帮助和反馈,以提高我的代码质量。我也是编程新手请说清楚。
安全是一个很大的话题,甚至主要的网站都被黑了。
这就是说我认为你的解决方案不安全,因为你在数据库中存储了普通密码。
此外,您可以在一个查询中完成所有操作。就像是:
$firstname = trim($_POST["firstname"]);
$password = plain_password_to_hash(trim($_POST["password"])); // Important!
$sql = "SELECT id, user_type FROM users WHERE firstname = :firstname AND password = :password";
$stmt = $conn->prepare($sql);
$stmt->execute(["firstname" => $firstname, "password" => $password]);
$res = $stmt->fetch();
// If $res is empty, the combination of firstname and password wasn't found.
有关密码安全,请阅读: