一、認證的目的是爲了認出用戶是誰,受權的目的是爲了決定用戶可以作什麼。php
二、認證明際上就是一個驗證憑證的過程。算法
三、若是隻有一個憑證被用於認證,則稱爲「單因素認證」;若是有兩個或者多個憑證被用於認證,則稱爲「雙因素認證」或者「多因素認證」。通常來講,多因素認證的強度要高於單因素認證。數據庫
一、密碼是最多見的一種認證手段,持有正確密碼的人被認爲是可信的。「密碼強度」 是設計密碼認證方案時第一個須要考慮的問題。 瀏覽器
二、黑客們經常使用的一種暴力破解手段,不是破解密碼,而是選擇一些弱口令,好比123456,而後去猜解用戶名,知道發現一個使用弱口令的帳戶爲止。因爲用戶名每每是公開的信息,攻擊者能夠收集一份用戶名的字典,是的這種攻擊的成本很是低,而效果卻比暴力破解密碼要好不少。安全
三、密碼的保存也有一些須要注意的地方。通常來講,密碼必須以不可逆的加密算法,或者是單向散列函數,機密後存儲在數據庫中。將明文密碼通過哈希後(好比MD5或者SHA-1)再保存到數據庫中,是目前業界比較廣泛的作法——在用戶註冊時就已經將密碼哈希後保存在數據庫中,登陸時驗證密碼的過程僅僅是驗證用戶提交的「密碼」哈希值,與保存在數據庫中的「密碼」哈希值是否一致。目前黑客們普遍使用的一種破解MD5後密碼的方法是「彩虹表」。彩虹表的思路是收集儘量多的密碼明文和明文對應的md5值。這樣只須要查詢md5值,就能找到該md5值對應的明文。爲了不密碼哈希值泄漏後,黑客可以直接經過彩虹表查詢出密碼明文,在計算密碼明文的哈希值時,增長一個「salt」。「salt」是一個字符串,它的做用是爲了增長明文的複雜度,並能使得彩虹表一類的攻擊失效。服務器
salt的使用以下:cookie
MD5(username+password+salt)session
salt應該保存在服務器端的配置文件中,並妥善保存。框架
當用戶登陸完成後,在服務器端就會建立一個新的會話(session),會話中會保存用戶的狀態和相關信息。服務器端維護全部在線用戶的session,此時的認證,只須要知道是哪一個用戶在瀏覽當前的頁面便可。爲了告訴服務器應該使用哪個session,瀏覽器須要把當前用戶持有的sessionID告訴服務器。常見的作法就是把sessionID加密後保存在cookie中,由於cookie會隨着HTTTP請求頭髮送,且受到瀏覽器同源策略的保護。函數
session劫持就是一種經過竊取用戶sessionID後,使用該sessionID登陸進目標帳戶的攻擊方法,此時攻擊者其實是使用了目標帳戶的有效session。若是sessionID是保存在cookie中的,則這種攻擊能夠稱爲cookie劫持。
sessionID除了能夠保存在cookie中外,還能夠保存在URL中,做爲請求的一個參數。可是這種方式的安全性難以經受考驗。 在生成sessionID時,須要保證足夠的隨機性,好比採用足夠強的僞隨機數生成算法。如今的網站開發中,都有不少成熟的開發框架可使用。
舉例:
認證前的url是 : http://bbs.xxxx.com/wap/index.php?action=forum&fid=72&sid=2iu2pf
其中,sid是用戶認證的sessionID。用戶登陸後,這個sid沒有發生改變,所以黑客能夠先構造好此URL,並誘使其餘用戶打開,當用戶登陸成功後,黑客也能夠直接經過此URL進入用戶帳號。
解決session fixation的辦法是: 在登陸完成後,重寫sessionID。
通常來講,session是有生命週期的,當用戶長時間爲活動後,或者用戶點擊退出後,服務器將銷燬session。若是session一直不銷燬的話,攻擊者就能經過此有效的session一直使用用戶的帳號,成爲一個永久的「後門」。攻擊者能夠經過不停地發起訪問請求,讓session一直活下去。(登陸進用戶的帳號,不停地刷新頁面)
如何對抗session保持攻擊呢?
(1)在必定時間後,強制銷燬session
(2)當用戶客戶端發生變化時(好比用戶的IP、useagent等),要求用戶從新登陸。
(3)同一個用戶能夠同時擁有幾個有效的session。
它但願用戶只須要登陸一次,就能夠訪問全部的系統。從安全的角度來看,sso把風險集中在單點上,這樣作有利有弊。
目前互聯網上最爲開放和流行的單點登陸系統是OpenID。OpenID是一個開放的單點登陸框架。在用戶登陸網站時,用戶只須要提交他的OpenID(就是用戶惟一的URI)以及OpenID的提供者,網站就會將用戶重定向到OpenID的提供者進行認證,認證完成後再重定向回網站。
認證的手段是豐富多彩的。在互聯網中,除了密碼能夠用於認證外,還有不少新的認證方式可供使用。咱們也能夠組合使用各類認真手段,以雙因素認證的方式,提升安全強度。
在WEB應用中,用戶登陸以後,服務器端一般會創建一個新的session以跟蹤用戶的狀態。每一個session對應一個標識符sessionID,sessionID用來標識用戶身份,通常是加密保存在cookie中。有的網站也會將session保存在cookie中,以減輕服務器端維護session的壓力。圍繞着session可能會產生不少安全問題,這些問題都是設計安全方案時須要考慮到的。