php怎么查询数据库密码,如何验证php中的密码是通过mysql查询手动散列插入到数据库中的?...

有没有办法通过自己的散列方法插入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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值