FormsAuthentication是ASP.NET運行時提供的一種Web身份驗證方案,以cookie爲信息載體,同其它身份驗證方案相比,此方案普遍應用於各種的Web應用中,其實現原理其實和具體的Web服務器編程技術關係不大,理解FormsAuthentication,一樣能夠在Java或PHP中使用。web
FormsAuthenticationTicket實際上是一個cookie,多數封裝的操做也是從cookie使用的角度去實現的。出於業務的需求,咱們會在經過身份認證的瀏覽器寫入用戶有關的信息,用戶信息結合cookie屬性能夠構成基本的票據,票據是下次用戶請求時認證和受權的依據。這是很是簡便的思路,但若是這個依據是公開的、可構造的,那麼這個票據的意義將大打折扣。經過構造票據就能夠達到躲避認證、僞造身份和受權的目的,這對於應用而言很是危險。編程
衆所周知,網絡通訊的信道是非安全的公共網絡。對於信息須要保護的系統,認證的過程和認證後的票據應該處於被保護的狀態。首先,票據應該是加密的,加密雖然增長了讀取票據是額外的解密運算,但增長了掌握票據內容的難度。FormsAuthentication的提供的Encrypt方法加密存儲在瀏覽器的票據cookie,這能夠說是APS.NET的一個安全福利。然而如前所說,加密僅僅是增長了掌握票據內容的難度,若是某人利用別人的合法認證票據,應用系統沒法基於票據規避身份盜用的狀況。瀏覽器
cookie重放,或是票據盜用是Web安全中常常出現的身份冒用攻擊。這種攻擊方法不須要對cookie進行逆向理解,只要將獲取的用戶cookie注入瀏覽器中,就能夠以該用戶的身份訪問目標站點,非法獲取網絡資源。目前國內多數微博服務、郵件服務都有這樣的狀況。安全
那麼這樣的狀況可否規避。一般咱們的系統在業務設計時,總會信賴本身寫入票據的內容,判別身份時也僅僅讀取身份標識,就職務當前的操做由對應用戶發出。這個很是要命的單因子斷定是產生身份冒用的一個根源,解決的辦法就是在用戶信息中輸入更多的認證時的網絡狀況,如瀏覽器的IP、特徵等信息,甚至包括有服務器生成的惟一字符,在後續的再認證中在業務流程前加入額外信息的校驗。雙因子認證,利用當時的環境信息做爲安全認證的重要內容,能夠在必定程度上增長系統的安全度。服務器