1留特、認(rèn)證與授權(quán)的區(qū)別
- 認(rèn)證(Authentication)
-
授權(quán)(Authorization)
認(rèn)證的目的是為了認(rèn)出用戶是誰蚁廓,而授權(quán)的目的是為了決定用戶能夠做什么
認(rèn)證實(shí)際上就是一個驗證憑證的過程
1籍琳、只有一個憑證被用于認(rèn)證赦役,則稱為“單因素認(rèn)證”
2烈拒、如果有兩個或多個憑證被用于認(rèn)證段磨,則稱為“雙因素”
2镇饮、目前常用的一種暴力破解手段
選擇一些弱口令蜓竹,比如123456,然后猜解用戶名储藐,直到發(fā)現(xiàn)一個使用弱口令的賬戶為止俱济。由于用戶名往往是公開的信息,攻擊者可以收集一份用戶名的字典钙勃,使得這種攻擊的成本非常低蛛碌,而效果卻比暴力破解密碼要好很多
3、密碼的保存
密碼必須以不可逆的加密算法辖源,或者是單向散列函數(shù)算法蔚携,加密后存儲在數(shù)據(jù)庫中
將明文密碼經(jīng)過哈希(比如MD5或者SHA-1)在保存到數(shù)據(jù)庫希太,是目前業(yè)界比較普遍的做法
4、一種破解MD5后密碼的方法
彩虹表
收集盡可能多的密碼明文和明文對應(yīng)的MD5值
為了避免密碼哈希值泄露后酝蜒,黑客能夠直接通過彩虹表查詢出密碼明文誊辉,在計算密碼明文的哈希值時,增加一個"Salt"
"Salt"時一個字符串亡脑,它的作用時為了增加明文的復(fù)雜度堕澄,并能夠使得彩虹表一類的攻擊失效
MD5(Username+Password+Salt)
其中Salt=abcddcba……(隨機(jī)字符串)
5、Session與認(rèn)證
當(dāng)認(rèn)證成功后霉咨,就需要替換一個對用戶透明的憑證——SessionID
當(dāng)用戶已經(jīng)成功登陸網(wǎng)頁后蛙紫,在服務(wù)器端會生成一個新的會話(其中保存用戶的狀態(tài)和相關(guān)信息),此時只需要知道是哪個用戶在瀏覽當(dāng)前網(wǎng)頁即可——把當(dāng)前用戶持有的SessionID告知服務(wù)器
最常見的作法就是把SessionID加密后保存在Cookie中途戒,因為Cookie會隨著HTTP請求頭發(fā)送坑傅,且受到瀏覽器同源策略的保護(hù)
SessionID還可以保存在URL中,作為請求的一個參數(shù)(不安全)
6棺滞、Session Fixation攻擊(會話固定攻擊)
在用戶登錄網(wǎng)站的過程中裁蚁,如果登錄前后用戶的SessionID沒有發(fā)生變化,則會存在Session Fixation問題
攻擊者先獲取一個未經(jīng)認(rèn)證的SessionID,然后將這個SessionID交給用戶Y去認(rèn)證继准,Y完全認(rèn)證后枉证,服務(wù)器并未更新此SessionID的值(注意是未改變SessionID,而不是未改變Session),所以X可以直接憑借此SessionID登錄進(jìn)Y的賬戶
7移必、單點(diǎn)登錄(SSO,Single Sign On)
它希望用戶只需要登錄一次室谚,就可以訪問所有的系統(tǒng)
SSO的優(yōu)點(diǎn)在于風(fēng)險集中化,只需要保護(hù)好這一個點(diǎn)崔泵。缺點(diǎn)同樣很明顯秒赤,因為風(fēng)險集中了,所以單點(diǎn)一旦被攻破的話憎瘸,后果非常嚴(yán)重入篮。