最近在做P2P網貸系統,由於對安全的要求比較高,因此做每一步都比較小心,考慮再三。
在做忘記密碼功能時考慮到郵箱鏈接的安全性,去網上參考下別人的意見,查詢后發現許多網站的這個功能都存在漏洞,如:
手機方式:http://www.wooyun.org/bugs/wooyun-2010-018055
郵件方式:http://www.2cto.com/Article/201305/215934.html
http://www.wooyun.org/bugs/wooyun-2013-017322
嚇到了吧,所以任何小的功能稍加不注意,可能就是一個大的漏洞
我的解決方案:(有不同意見的可以馬上噴):
1.存儲數據庫是必須的,先建數據庫表用來存儲每次發送的信息,表結構如下
編號:就是與某個用戶進行關聯,標注是哪個用戶點擊了忘記密碼(在發送郵件前肯定有叫用戶輸入信息如用戶名,郵箱地址),這樣我們就能鎖定該用戶了
過期時間:就是設定郵件在多少時間內有效
隨機md5值:是用來唯一標注郵件鏈接的,可以生成時間戳然后用md5進行加密
類型:用來區分不同的鏈接,看你自己的需要
2.用戶點擊忘記密碼后,我們需要他們輸入用戶名,郵箱地址來進行用戶的認證,如果認證正確則向該用戶發送一封重置密碼的鏈接郵件,並將信息存入到該表中:
如下:
3.用戶點擊后重置密碼后,程序進行驗證,通過vcode和email到記錄表中進行查詢,如果存在表示該鏈接有效,
如果驗證正確了就顯示重置密碼頁面,重置成功后將那個記錄進行刪除(也可以添加一個字段來標注用戶點擊鏈接的次數,控制超過幾次后就將過期)