《白帽子講web安全》讀書筆記系列7:認證與會話管理

1、認證VS授權 authentication authorization

認證:認出用戶是誰;實際上就是一個驗證憑證的過程。

授權:決定用戶能幹什麼。

單因素認證:只驗證一個憑證

雙因素認證:只驗證兩個憑證

多因素認證:....

 

2、密碼:最常見的認證手段

長度考慮:

普通應用6位以上

重要應用8位以上,並考慮雙因素認證

 

密碼複雜度:

區分大小寫

小寫字母、大寫字母、數字、符號兩種以上的組合

不能有連續性字符,如abcd1234

避免重複字符,如aaaa

 

其他:

避免簡單單詞,如good;

不要使用用戶的公開數據或與個人隱私相關的數據,如姓名簡寫、QQ號碼、身份證號碼、暱稱、電話號碼、生日、英文、公司名等

 

黑客破解

老套:暴力破解

新招:簡單密碼+猜解用戶名

 

密碼保存:必須以不可逆加密算法或者單向散列的函數算法,加密後存儲在數據庫中

 

彩虹表:收集儘可能多的密碼明文和對應的MD5值,只需要查詢到MD5值,就能找到對應明文密碼;

應對方案:計算密碼明文哈希值時,加入一個salt字符串,增加明文複雜度,salt應善加保存在服務端

 

3、多因素認證

支付寶:支付密碼、手機動態口令、數字證書、寶令、支付盾、第三方證書等

 

4、session與認證

密碼與認證等手段一般僅用於登錄,此後需要採用一個對用戶透明的憑證,即sessionID。

最常見的做法是把sessionID加密保存在Cookie,隨HTTP請求頭髮送到服務端;

Cookie泄露的途徑:XSS攻擊、網絡Sniff、本地木馬竊取;

對於通過XSS漏洞竊取Cookie的攻擊,通過給Cookie標記httponly,可以有效緩解。

SessionID還可以保存在URL中,作爲請求的一個參數,不安全。

生成sessionID時,需要保證足夠的隨機性。

 

5、Session Fixation攻擊

兩個用戶先後登錄網站,而用戶的SessionID沒有發生變化,則會存在Session Fixation問題。

解決辦法:登錄完成後,重寫SessionID。

 

6、Session保持攻擊

SessionID是有生命週期的,當用戶長時間未活動或點擊退出後,服務器將銷燬sessionid;

Cookie也有失效時間;

某些應用可以通過不停的發起訪問請求,讓session一直活下去。

Cookie的expire時間是完全可以有客戶端控制的,篡改這個時間,並使之永久有效,就有可能獲得一個永久有效的Session。

解決辦法:

一定時間後,強制銷燬Session

當用戶IP、useragent等信息發生變化時,強制銷燬session,要求用戶重新登錄;

限制同一用戶可以擁有的有效session數。

 

7、單點登錄(SSO:Single Sign On)

用戶只需要登錄一次,就可以訪問所有的系統。

SSO的優點:風險集中化,只需要保護這個一共點;

SSO的缺點:風險集中化,一旦這個點被攻破,後果將非常嚴重。

OpenID目前互聯網上最爲開放和流行的單點登錄系統。

每個用戶將擁有一個唯一的URI,用戶登錄網站時,只需要提交其OpenID(用戶的URI)以及OpenID的提供者,網站就會將用戶重定向到OpenID的提供者進行認證,認證完成後再重定向回網站。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章