有没有办法通过自己的散列方法插入mysql数据库的php验证密码?
例如,如果我手动在表中插入用户数据,请假设用户表,如下所示:
INSERT INTO users (email, pswd) VALUES ('demo@example.com', SHA1('pass123'));
让我们假设mysql数据库中的哈希密码是:
+------------------------------------------+
| pswd |
+------------------------------------------+
| AAFDC23870ECBCD3D557B6423A8982134E17927E |
+------------------------------------------+
现在,我想使用php创建一个登录表单,当用户插入凭据时,他们应该能够登录.我的意思是,用户不会有任何php注册表单;密码将手动提供.但是如何验证用户在php中提供的数据与存储在mysql数据库中的密码?
据我所知,php中的password_verify()只有在使用自己的password_hash()函数对密码进行哈希处理时才有效.
我找到了另一个解决方案,就是再次使用sql查询,就像这样 –
SELECT pswd FROM users WHERE email='$_POST["email"]' AND pswd = md5($_POST["password"]);
然后通过计算执行该mysql查询的任何行返回的结果集,从而验证.但是,这对我来说似乎是一个非常糟糕的方法.我不知道是否还有其他办法.必须有一些好方法来解决这个问题.或者,可能是我必须使用另一个PHP表单将数据插入数据库.
您的建议非常感谢.谢谢.
解决方法:
我建议你使用password_hash()并将结果哈希存储在数据库中.
INSERT INTO users SET email=?, pswd=?
如果需要手动插入密码,可以使用快速命令行PHP脚本将其转换为哈希.例如:
使用phpmyadmin或mysql客户端手动将密码插入数据库时,请使用此字符串.
避免将密码放入SQL查询中的文字字符串中是个好主意,即使您使用SQL函数对其进行散列也是如此.请记住,查询日志和二进制日志中记录了整个SQL字符串 – 未散列.
稍后,在验证登录时,获取密码哈希,如下所示:
SELECT pswd FROM users WHERE email=?
然后你的PHP代码有哈希.您可以使用password_verify().
P.S.:请学习使用参数化查询,不要在SQL查询中使用$_POST变量.这是一个SQL注入漏洞.
标签:php,mysql
来源: https://codeday.me/bug/20190727/1549889.html