【发布时间】:2016-06-28 03:06:46
【问题描述】:
我正在尝试使用 SQL 和 PHP 创建登录系统。我有一个包含三个字段的标准数据库:用户名、密码和授权级别。出于某种原因,当我测试代码时,登录失败,即使我使用正确的访问级别和正确的凭据。在我将访问级别检查器添加到我的 PHP 之前,代码可以正常工作,但现在它返回登录失败错误。
//If there are input validations, redirect back to the login form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: login-test.php");
exit();
}
//Create query
$qry="SELECT * FROM members WHERE username='$username' AND password='$password'";
$result=mysql_query($qry);
$row = mysql_fetch_object($qry);
//Check whether the query was successful or not
if($result) {
if(mysql_num_rows($result) == 1 && $row->authlevel == "admin") {
//Login Successful
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['username'];
$_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
$_SESSION['SESS_LAST_NAME'] = $member['username'];
session_write_close();
header("location: admin_index.php");
exit();
} else {
//Login failed
header("location: login-failed.php");
}
}else {
die("Query failed");
}
?>
【问题讨论】:
-
你为什么要搜索密码,它应该被散列而不是传输。比如找到用户名,然后比较。您也不应该使用 mysql 也不应该将变量放入 sql
-
'; Select * from members where authLevel = "admin" limit 1 --如果这是我输入您的用户名,我刚刚入侵了您的登录系统。只是说。 -
这个sql有很多错误,我可以给你一个教程来用mysqli制作一个正确的登录表单吗?
-
我猜这就是SQL注入的意思?我将对密码进行哈希处理,但出于测试目的我取出了 md5 的东西,所以我可以看到传递给 SQL 的内容,但我会在发布之前将其放回。
-
md5 不安全,至少使用加盐的 sha256 密码,或 php hash_password 函数。
标签: php mysql sql object fetch