小弟使用password_hash加密驗證碼,並且把驗證碼放入網址的get內,如下
https://xxx.com/yyy.php?id=$id&hash=$password_hash
並將驗證碼儲存在資料庫
使用者從信件點及網址後,會透過id 取得驗證碼,並且跟 $password_hash 做驗證(password_verify),我希望可以使用這個網址的有效時間是三天,
問:
1.想請問這樣的驗證方式會不會很容易地被破解出來(因為發現很多驗證碼都是限制60秒到5分鐘)
2.因為password_hash 的長度都是固定的,能否加長提高破解難度?
ps:驗證碼 = 隨機的英文或數字,共8碼
1.想請問這樣的驗證方式會不會很容易地被破解出來(因為發現很多驗證碼都是限制60秒到5分鐘)
我認為沒有問題,Email驗證不要只設定5分鐘,我的Mail Server的灰名單就10分鐘了……
2.因為password_hash 的長度都是固定的,能否加長提高破解難度?
我覺得沒什麼意義,SHA512就夠了吧
2.因為password_hash 的長度都是固定的,能否加長提高破解難度?
hash 位數再多,驗證碼變化的數量還是固定 62^8(大小寫+數字)
可以考慮用 random_bytes ,這樣 8 位就有 256^8 種變化
【原本方式】
驗證碼:隨機產生的8位英文或數字
資料庫儲存:驗證碼
url參數:password_hash(驗證碼)
比對:比較「url參數」與「password_hash(資料庫儲存)」
【變更為】
亂數字串:使用 random_bytes(8 or more)
資料庫儲存:password_hash(亂數字串)
url參數:password_hash(亂數字串)
比對:直接比較「url參數」與「資料庫儲存」