失效的身份認證和會話管理
什麼是身份認證❓
常見的身份認證可見於以用戶名密碼的形式進行系統登錄,在安全性較高的情況下,還會伴有很多登錄認證方式。
認證方式又有很多種,EX:靜態口令、OTP(動態口令)、AD域認證、證書、驗證碼等。
身份認證的結果往往是獲得一個令牌,通常放在Cookie中,之後對用戶身份的識別根據這個授權的令牌進行識別,而不需要每次都要登陸。
什麼是會話管理❓
客戶端不斷地向服務端發送請求並獲得響應的一系列交互過程,請求並建立關聯的過程被稱為會話管理。
在服務端第一次接收到客戶端的請求的時候,會產生一個初始化的會話,並分配給該會話一個標識符。在後面的請求中,客戶端的請求都必須包含此標識符,擁有此標識符,服務端才會把新的請求和對應的會話聯繫起來。
什麼是Cookie❓
其實cookies是由網路伺服器存儲在你電腦硬碟上的一個txt類型的小文件,它和你的網路瀏覽行為有關,所以存儲在你電腦上的cookies就好像你的一張身份證,你電腦上的cookies和其他電腦上的cookies是不一樣的;cookies不能被視作程式碼執行,也不能成為病毒,所以它對你基本無害。
什麼是失效的身份認證和會話管理❓
原理:程式設計師再開發Web程式是,開發人員往往只關注Web程式所需要實現的功能。常常會建立自定義的認證和會話方案。但是要正確的實現這些方案是很難的,產生的結果就是在用戶:退出、密碼管理、超時重登、記住我、密碼找回、賬戶更新等方便出現很多漏洞。因為每一個功能的實現方式都不同,所以想找出這些漏洞有時就很困難。
危害:這些漏洞的存在,就會使得惡意用戶有機可乘,可能會被竊取或操縱用戶的會話和Cookie,進而模仿網路上的合法用戶。
如何判斷是否存在失效的身份驗證和會話管理❓
首先需要明白,最需要保護的數據是認證憑證和會話ID。
1️⃣ 用戶身份驗證沒有使用哈希(Hashing)或加密保護。
2️⃣ 認證憑證是否可猜測,或者能夠能夠通過薄弱的賬戶管理功能重寫。
💭賬戶管理功能:創建賬戶、修改密碼、密碼恢復、弱會話ID重寫等。
3️⃣ 會話ID暴露在URL里(例如URL重寫)。
💭URL重寫:簡單來說就是將客戶的URL請求重定向到你指定的URL。
4️⃣ 會話ID容易受到固定的攻擊。
5️⃣ 會話ID沒有超時限制,或者用戶會話或身份驗證令牌特別是單點登錄令牌在用戶註銷時沒有失效。
💭單點登錄(SSO):用戶只要登錄了其中一個系統,就可以訪問其他相關係統,而不用進行身份驗證登錄。
6️⃣ 成功註冊後,會話ID沒有輪轉。
7️⃣ 密碼、會話ID和其他認證憑據使用未加密連接傳輸。
如何防範❓
1️⃣ 區分公共區域和受限區域
我的理解:某應用部分功能只有開通VIP、SVIP、大SVIP才可使用🤣
2️⃣ 對最終用戶帳戶使用帳戶鎖定策略
我的理解:當一個用戶多次登陸失敗後,對帳戶進行鎖定。常見於Android系統的數字密碼,多次輸入錯誤會限制多少時間後在嘗試。
3️⃣ 支援密碼有效期
我的理解:通過設置密碼有天數來強制用戶更改密碼🕗。
4️⃣ 能夠禁用帳戶
我的理解:當用戶執行刪除等類似含有風險的命令時❌,可以對帳戶進行鎖定。
5️⃣ 不要在用戶存儲中存儲密碼
我的理解:登錄旁邊的 記住我🈲
6️⃣ 要求使用強密碼
我的理解:強制用戶使用複雜密碼,比如:大小寫、數字、特殊字元、長度✔
7️⃣ 不要在網路上以純文本形式發送密碼
當有人向你借號,請加密後發給他💖
8️⃣ 保護身份驗證 Cookie
9️⃣ 使用 SSL 保護會話身份驗證 Cookie
🔟 對身份驗證 cookie 的內容進行加密
1️⃣1️⃣ 限制會話壽命
1️⃣2️⃣ 避免未經授權訪問會話狀態
(具體防範方式可以參考以下URL://blog.csdn.net/whoim_i/article/details/103171346)
—end—