如何检查用户密码ID与下面的mysqli代码中的给定密码相同,这不起作用
Posted
技术标签:
【中文标题】如何检查用户密码ID与下面的mysqli代码中的给定密码相同,这不起作用【英文标题】:How to check the user password id same as given password in mysqli Code below which is not working 【发布时间】:2022-01-14 12:24:33 【问题描述】:if(array_key_exists('signinbtn',$_POST))
if(!$_POST['email'])
echo'<p>please enter your email</p><br>';
elseif(!$_POST['password'])
echo'<p>please enter your password</p><br>';
else
$query = "SELECT `id`
FROM `users`
WHERE email = '".mysqli_real_escape_string($link , $_POST['email'])."'";
$query_result = mysqli_query($link , $query);
if($get_row = mysqli_num_rows($query_result) == 0)
echo'Email is not registered';
else
$post_query = "SELECT `password`
FROM `users`
WHERE email = '".mysqli_real_escape_string($link , $_POST['email'])."'";
if($resultforsignup = mysqli_query($link , $post_query))
if(mysqli_num_rows($resultforsignup) == $_POST['password'])
echo'success';
else
echo'password does not meet';
else
echo'error while sign in';
我正在学习mysql 现在的问题是我想检查用户密码是否相同。请解决这个问题 这是网站mridul.ml
【问题讨论】:
您可以在一个选择中选择多个列,因此这两个选择可以写为SELECT id, password FROM ...
您的脚本对SQL Injection Attack 开放。即使是if you are escaping inputs, its not safe!,您也应该始终在MYSQLI_
或PDO
API 中使用prepared parameterized statements,而不是将用户提供的值连接到查询中。永远不要相信任何用户输入!
我们已经 2021 年了,人们仍然转义数据,而不是使用完全避免在 SQL 查询字符串中插入数据的参数化查询?!
肯定需要重新考虑 if ( mysqli_num_rows($resultforsignup) == $_POST['password'] )
从查询返回的行数几乎肯定不会等于用户输入的密码
RiggsFolly 我在这里没有使用任何安全措施,我只是不想在用户写入像 codex'city 这样的数据时转义数据,因此如果你使用 ' 这将在 codex city 的最后一个停止不包括,我知道我必须使用 md5 或其他任何东西来存储我刚才说过的密码,我如何检查与给定密码相同的用户密码
【参考方案1】:
您正在将查询返回的行数与密码进行比较。所以除非密码是1,否则它不会起作用。
如 cmets 中所述,您应该为查询使用准备好的语句。
此外,您显然将密码的原始文本存储在数据库中。你不应该这样做。您应该使用盐和安全哈希作为密码。幸运的是,php 为此提供了一些方便的函数。使用password_hash 将密码存储在数据库中,然后当您从数据库中获取密码时使用password_verify 来查看它是否正确。这可以防止攻击者在访问您的数据库时获取您所有用户的密码。
【讨论】:
以上是关于如何检查用户密码ID与下面的mysqli代码中的给定密码相同,这不起作用的主要内容,如果未能解决你的问题,请参考以下文章