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