自動登入的設計思路
很多網站登入的時候,都會有一個“記住我”功能,使用者可以在限定時間段內免登入,比如豆瓣、人人、新浪微博等都有這種設計。這種技術其實就是基於 cookie的自動登入,使用者登入的時候會把需要驗證的token寫到cookie裡面,當使用者session失效的時候,token會通過cookie 傳送給伺服器端,伺服器端解析token判斷是否已經登入;
這裡面的token如何設計是關鍵,到底存什麼資料才能保證系統的安全性呢?有些新手可能會想,把使用者id和password直接md5加密存到cookie,這樣做是最糟糕的設計,使用者的敏感資訊直接暴露出來,黑客可以偽造別人的id進行嘗試性登入,可以想象黑客知道了管理員許可權賬號的id,試過幾千幾萬次,密碼和加密演算法很可能破解出來。token要相對安全,不應該是簡單的使用者名稱和密碼md5加密,使用者密碼其實完全可以不用存進去,分兩步來做:
使用者 存在之後,我們再拿這個token跟第一步存在資料庫中的token進行比較,
看是否相等,如果不等說明token已經過期,這樣做可保證每次使用者登入之 後token值都不一樣,之前用過的token都會失效;
這裡面的token如何設計是關鍵,到底存什麼資料才能保證系統的安全性呢?有些新手可能會想,把使用者id和password直接md5加密存到cookie,這樣做是最糟糕的設計,使用者的敏感資訊直接暴露出來,黑客可以偽造別人的id進行嘗試性登入,可以想象黑客知道了管理員許可權賬號的id,試過幾千幾萬次,密碼和加密演算法很可能破解出來。token要相對安全,不應該是簡單的使用者名稱和密碼md5加密,使用者密碼其實完全可以不用存進去,分兩步來做:
----token 是一些資訊的組合,使用者id+使用者名稱+expires過期時間+ip地址+salt,具體加密演算法最好自己寫,不能使是常見的加密函式(md5),當然這 個加密函式必須可逆,這個token我們同時要儲存在使用者表資料庫裡面,set cookie的時候記得http only;
----伺服器端拿到cookie之後,進行逆解析,
這個時候我們要驗證如下資訊:cookie是否過期、ip地址是否發生變化、使用者id和使用者名稱是否存在;使用者 存在之後,我們再拿這個token跟第一步存在資料庫中的token進行比較,
看是否相等,如果不等說明token已經過期,這樣做可保證每次使用者登入之 後token值都不一樣,之前用過的token都會失效;
所謂加Salt,就是加點“佐料”。當使用者首次提供密碼時(通常是註冊時),由系統自動往這個密碼里加一些“Salt值”,這個值是由系統隨機生成的,並且只有系統知道。然後再雜湊。而當使用者登入時,系統為使用者提供的程式碼撒上同樣的“Salt值”,然後雜湊,再比較雜湊值,已確定密碼是否正確。
這樣,即便兩個使用者使用了同一個密碼,由於系統為它們生成的salt值不同,他們的雜湊值也是不同的。即便黑客可以通過自己的密碼和自己生成的雜湊值來找具有特定密碼的使用者,但這個機率太小了(密碼和salt值都得和黑客使用的一樣才行)。
相關文章
- win10如何設定自動登入 win10設定自動登入的方法Win10
- win10 自動登入如何設定_windows10自動登入的設定步驟Win10Windows
- centos自動登入帳號設定CentOS
- Windows 10中設定自動登入Windows
- UI自動化關鍵字驅動的簡單設計思路UI
- lubuntu自動登入(lxde)Ubuntu
- win10系統怎麼設定自動登入 win10電腦實現自動登入的方法Win10
- C# 網路程式設計之網頁自動登入 (一).使用WebBrower控制元件模仿登入C#程式設計網頁Web控制元件
- 實現Web程式的自動登入Web
- SecureCRT - 自動登入跳轉Securecrt
- Mac Monterey如何設定自動填充登入密碼?Mac密碼
- 小米自動化運維平臺演進設計思路運維
- 讓WindowsXP也能自動登入Windows
- ioninteractive:移動登入頁設計的10條原則
- Mac設定使用者自動登入無需輸入密碼的方法Mac密碼
- Assh 自動登入 SSH/SFTP 的小工具FTP
- Python自動登入QQ的實現示例Python
- JSP程式設計實現使用者自動登入功能示例程式碼JS程式設計
- Spring Security 之 rememberMe 自動登入SpringREM
- Azure 基礎:用 PowerShell 自動登入
- linux expect自動登入ssh,ftpLinuxFTP
- jmeter介面自動化:登入到新增JMeter
- 掃描二維碼登入思路
- win10怎麼設定開機賬戶自動登入?Win10
- 如何設計APP登入模組?APP
- Python利用Selenium自動登入掘金Python
- linux expect詳解(ssh自動登入)Linux
- 教你實現windowsxp自動登入大法(轉)Windows
- playwright自動登入獲取cookie/ckCookie
- WINNT怎樣設定自動登陸
- 直播app原始碼,登入時自動輸入密碼/自動記住密碼APP原始碼密碼
- 自動化測試思路
- 終端登入被互相踢掉,思路分析
- WebUI 自動化測試-PO 設計模式入門WebUI設計模式
- Google自動程式設計框架AutoML入門指南Go程式設計框架TOML
- Windows8不輸入密碼自動登入系統的方法Windows密碼
- j2ee cookie 實現自動登入Cookie
- 自動化驗證碼登入如何實現?