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
總結
以上是生活随笔為你收集整理的php怎么查询数据库密码,如何验证php中的密码是通过mysql查询手动散列插入到数据库中的?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据迁移,不停机上线的正确姿势
- 下一篇: 数据库优化:SqlServer的with