我目前正在尝试更新我的不安全登录系统。但是无法弄清楚如何合并if(password_verify ..命令。
非常感谢任何帮助。
//Create query
$qry="SELECT * FROM user WHERE username='$username' AND password='$password'";
$result=mysql_query($qry);
if($result) {
if(mysql_num_rows($result) > 0) {
//IF Login Successful
session_regenerate_id();
$user = mysql_fetch_assoc($result);
$_SESSION['SESS_USER_ID'] = $user['user_id'];
$_SESSION['SESS_FIRST_NAME'] = $user['username'];
$_SESSION['SESS_LAST_NAME'] = $user['password'];
session_write_close();
header("location: home.php");
exit();
}else {
//IF Login failed
$errmsg_arr[] = 'user name and password not found';
$errflag = true;
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: index.php");
exit();
}
}
答案 0 :(得分:2)
此后您的问题的答案和一些一般信息:
密码验证功能:
一个好的做法是在存储敏感数据之前对其进行加密。由于您不希望有恶意的人能够检索密码,您将使用不对称(单向)加密算法系列,我们称之为哈希。
您将通过使用输入的值重新生成哈希值来检查用户是否为您提供了正确的凭据,并将其与存储在数据库中的值进行比较。
在这种情况下,您不会在查询中插入任何用户输入。
您可以通过添加salt来增加哈希生成的复杂性。
password_hash文档非常明确,您可以在此link中找到有关哈希算法的SO讨论。
帐户创建/密码更改步骤:
总结身份验证步骤:
SQL注入和用户输入:
为什么不在查询中插入用户输入?
您不应该在查询中插入用户输入,因为SQL injection是用户使数据库执行自己的查询的一种方式。 使用注射他可以显示或更新一些数据,而他不应该被允许。
防止注射
为防止注射,我们的想法是清理/确保用户输入不包含恶意查询/说明。
如今,我们有PDO等工具使用prepared statements处理这些问题。