php怎么查询数据库密码,如何验证php中的密码是通过mysql查询手动散列插入到数据库中的?...
有沒有辦法通過自己的散列方法插入mysql數(shù)據(jù)庫的php驗(yàn)證密碼?
例如,如果我手動在表中插入用戶數(shù)據(jù),請假設(shè)用戶表,如下所示:
INSERT INTO users (email, pswd) VALUES ('demo@example.com', SHA1('pass123'));
讓我們假設(shè)mysql數(shù)據(jù)庫中的哈希密碼是:
+------------------------------------------+
| pswd |
+------------------------------------------+
| AAFDC23870ECBCD3D557B6423A8982134E17927E |
+------------------------------------------+
現(xiàn)在,我想使用php創(chuàng)建一個登錄表單,當(dāng)用戶插入憑據(jù)時,他們應(yīng)該能夠登錄.我的意思是,用戶不會有任何php注冊表單;密碼將手動提供.但是如何驗(yàn)證用戶在php中提供的數(shù)據(jù)與存儲在mysql數(shù)據(jù)庫中的密碼?
據(jù)我所知,php中的password_verify()只有在使用自己的password_hash()函數(shù)對密碼進(jìn)行哈希處理時才有效.
我找到了另一個解決方案,就是再次使用sql查詢,就像這樣 –
SELECT pswd FROM users WHERE email='$_POST["email"]' AND pswd = md5($_POST["password"]);
然后通過計算執(zhí)行該mysql查詢的任何行返回的結(jié)果集,從而驗(yàn)證.但是,這對我來說似乎是一個非常糟糕的方法.我不知道是否還有其他辦法.必須有一些好方法來解決這個問題.或者,可能是我必須使用另一個PHP表單將數(shù)據(jù)插入數(shù)據(jù)庫.
您的建議非常感謝.謝謝.
解決方法:
我建議你使用password_hash()并將結(jié)果哈希存儲在數(shù)據(jù)庫中.
INSERT INTO users SET email=?, pswd=?
如果需要手動插入密碼,可以使用快速命令行PHP腳本將其轉(zhuǎn)換為哈希.例如:
使用phpmyadmin或mysql客戶端手動將密碼插入數(shù)據(jù)庫時??,請使用此字符串.
避免將密碼放入SQL查詢中的文字字符串中是個好主意,即使您使用SQL函數(shù)對其進(jìn)行散列也是如此.請記住,查詢?nèi)罩竞投M(jìn)制日志中記錄了整個SQL字符串 – 未散列.
稍后,在驗(yàn)證登錄時,獲取密碼哈希,如下所示:
SELECT pswd FROM users WHERE email=?
然后你的PHP代碼有哈希.您可以使用password_verify().
P.S.:請學(xué)習(xí)使用參數(shù)化查詢,不要在SQL查詢中使用$_POST變量.這是一個SQL注入漏洞.
標(biāo)簽:php,mysql
來源: https://codeday.me/bug/20190727/1549889.html
總結(jié)
以上是生活随笔為你收集整理的php怎么查询数据库密码,如何验证php中的密码是通过mysql查询手动散列插入到数据库中的?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据迁移,不停机上线的正确姿势
- 下一篇: ASP.NET+MVC+使用+Log4n