Php 如果不正确,如何添加登录详细信息确认?
如果不正确,如何添加登录详细信息确认?我想发生的是,当用户输入他/她的凭据时,他们的用户名和密码是正确的,但是用户类型是错误的,如果用户按下登录按钮,它会说“错误的凭据”,如果他们输入错误的凭据,用户名和密码也是错误的Php 如果不正确,如何添加登录详细信息确认?,php,html,Php,Html,如果不正确,如何添加登录详细信息确认?我想发生的是,当用户输入他/她的凭据时,他们的用户名和密码是正确的,但是用户类型是错误的,如果用户按下登录按钮,它会说“错误的凭据”,如果他们输入错误的凭据,用户名和密码也是错误的 <?php include "includes/config.php"; session_start(); if(isset($_POST['loginbutton'])){ $username = $_POST['username']; $pass
<?php
include "includes/config.php";
session_start();
if(isset($_POST['loginbutton'])){
$username = $_POST['username'];
$password = $_POST['password'];
$usertype = $_POST['usertype'];
if ($username != "" && $password != ""){
$sql_query = "SELECT * FROM tbl_useraccounts WHERE employee_id='".$username."' and password='".$password."' and usertype='".$usertype."'";
$result = mysqli_query($con,$sql_query);
while ($row=mysqli_fetch_array($result)) {
if ($row['employee_id']==$username && $row['password']==$password && $row['usertype']=='Admin'){
$_SESSION['username'] = $_POST['username'];
header('location: home.php');
}
elseif ($row['employee_id']==$username && $row['password']==$password && $row['usertype']=='SuperAdmin') {
$_SESSION['username'] = $_POST['username'];
header('location: HomeForSuperAdmin.php');
}
}
}
}
?>
是正确的
您对SQL注入非常开放,应该使用参数化的预处理语句,而不是手动构建查询
如果在某些针对MySQL的SQL中嵌入字符串,则必须使用MySQL的函数(mysqli_real_escape_string)对该字符串进行转义,并在登录失败时触发db query进行输入
修改代码:
<?php
include "includes/config.php";
session_start();
if(isset($_POST['loginbutton'])){
$username = $_POST['username'];
$password = $_POST['password'];
$usertype = $_POST['usertype'];
$loginFlag = true;
if ($username != "" && $password != ""){
$sql_query = "SELECT * FROM tbl_useraccounts WHERE employee_id='".$username."' and password='".$password."' and usertype='".$usertype."'";
$result = mysqli_query($con,$sql_query);
while ($row=mysqli_fetch_array($result)) {
if ($row['employee_id']==$username && $row['password']==$password && $row['usertype']=='Admin'){
$_SESSION['username'] = $_POST['username'];
header('location: home.php');
$loginFlag = true;
}
elseif ($row['employee_id']==$username && $row['password']==$password && $row['usertype']=='SuperAdmin') {
$_SESSION['username'] = $_POST['username'];
header('location: HomeForSuperAdmin.php');
$loginFlag = true;
}
else {
$loginFlag = false;
}
}
}
if($loginFlag == false){
#real_escape_string is used to prevent sql injection
$username = real_escape_string($_POST['username']);
$password = real_escape_string($_POST['password']);
$usertype = real_escape_string($_POST['usertype']);
# query assume table name log
$sql_query = "INSERT INTO log (username, password, usertype, ip_address)
VALUES ('$username ', '$password ', '$usertype ', '".$_SERVER['REMOTE_ADDR']."')";
}
}
?>
切勿以明文或使用MD5/SHA1存储密码!仅存储使用PHP创建的密码哈希,然后可以使用进行验证。看看这篇文章:了解到目前为止你尝试了什么?代码不包含任何错误的检查credentials@NicoHaase如果凭据不正确,我还没有输入任何代码来尝试。我仍然在网上寻找答案。如果(!password_verify(/*…*/){echo'Invalid credentials';}
看看我前一段时间写的内容,我的课程中还没有安全性。但这让我了解了sql注入是如何工作的。但是谢谢你把这些放进去。我仍然有一个问题,如果用户输入了错误的凭据,登录将如何通知用户。您可以在登录失败时返回请求数据,并在客户端(如200 420)进行检查…该代码仍然容易受到SQL注入的攻击-请不要建议使用此类易受攻击的代码,特别是如果您声称要避免它