姜晗 任翠池 王磊

摘 要 Cookie是解決HTTP協議無狀態性的主要方法,是實現Web認證的主要手段。通過系統分析Cookie的工作原理和應用特點,指出該認證機制容易遭受安全的威脅,提出并實現一種安全性較高的基于Cookie和Session相結合的身份認證的機制。
關鍵詞 Cookie安全;Session;時間隨機碼;RSA公鑰加密算法
中圖分類號:TP393 文獻標識碼:B
文章編號:1671-489X(2014)04-0036-02
以Web技術為代表的Internet網絡技術的迅速發展,促使人類社會正逐漸進入一個以Internet為中心的信息時代。應用層協議HTTP是Web應用的實現基礎,而HTTP協議本身是一種無狀態的協議,不能記錄客戶端的狀態信息。然而Web應用系統中很多情況下都需要維持這種狀態信息,HTTP協議的這種無狀態、面向非連接的缺陷很不利于Web應用的發展。為了解決這個問題,由Netscape公司推出了一項HTTP的狀態管理機制——Cookie。Cookie的出現彌補了HTTP協議無狀態、面向無連接的缺陷,為應用系統記錄客戶端的狀態信息以及對訪問者進行身份認證等操作程序的開發帶來很大方便。然而,由于Cookie信息在存儲和傳送過程中都是以明文形式進行的,當Cookie被作為一項便利的工具在Web中大量使用時,其安全性不得不引起用戶的注意。
本文主要分析Cookie的工作原理及應用特點,找出運用Cookie存在的安全隱患。針對這些安全隱患,提出并實現基于Cookie和Session相結合的身份認證機制,并且利用RSA公鑰加密算法對Cookie信息進行加密,提高身份認證機制的安全性。
1 Cookie的工作原理及應用分析
根據Netscape公司的官方文檔中的定義,Cookie是指在HTTP協議下,服務器或腳本可以維護客戶端計算機上信息的一種方式[1]。Cookie是借助于HTTP報文頭Set-Cookie來傳送和交換信息的。Cookie定義了兩種HTTP的報文頭:Set-Cookie報文頭和Cookie報文頭。Set-Cookie報文頭包含于Web服務器的響應頭(Response Header)中,Cookie報文頭包含在瀏覽器客戶端請求頭(Request Header)中。當用戶通過Web瀏覽器首次打開某一站點時,Web服務器將客戶端的信息寫進HTTP響應報文的Set-Cookie中,與HTTP響應一起發往Web瀏覽器。當用戶通過Web瀏覽器發送后續的請求時,Web瀏覽器要根據Web站點的URL從客戶端取出Cookie,并添加到HTTP請求報文中發送給Web服務器。
2 Session機制的應用分析
Session在RFC2109中的定義是:允許客戶端和服務器端通過使用HTTP的請求與響應頭中的數據來交換狀態信息的技術。實際上Session就是客戶端和服務器通過Cookie建立的一種對應關系,這種對應關系在RFC2109(HTTP State Management Mechanism)中被定義為術語“Session”。 每一個Session都是有始有終的,在用戶登錄時建立,在用戶退出時刪除。
通過Cookie來建立Session是RFC2109中規定的標準方法。服務器在HTTP響應頭的Set-cookie中設置Cookie值,與HTTP響應報文一起發往客戶端;客戶端在后續的訪問中必須將Cookie值附加在HTTP請求報文的頭部一起發往服務器。在服務器設置Set-cookie的同時也將Cookie的內容寫入Session。為了讓客戶端的每一個Session都有唯一的一個Cookie與它對應,在Cookie中選擇一個能夠區分每一個Cookie的值作為Session的標識。
這樣,Cookie和Session之間通過這個值就建立了對應關系,根據Cookie就可以找到相應的Session了。在用戶退出系統時,服務器會將與該用戶相對應的Session刪除。
3 基于Cookie和Session的身份認證機制的實現
根據上面介紹的基本原理,本文通過編寫cgi程序在Linux平臺上實現了基于Cookie和Session相結合的身份認證機制。本實現來源于網絡視頻監控系統項目中的一個模塊,為了保證系統的安全性,用戶登錄系統后的所有操作都需要再次進行身份認證。為了方便用戶的使用,后續的身份認證不再需要用戶輸入用戶名和密碼,而是通過Cookie和Session自動進行身份認證。
基于Cookie和Session的身份認證的原理及過程分析 基于Cookie和Session的身份認證機制的實現原理是:比較Cookie中綁定的IP地址和系統自動生成的隨機碼與保存在Session中的IP地址和隨機碼是否一致,若一致則能夠通過身份認證,否則不能夠通過身份認證。該認證機制涉及兩類應用界面:一個是用于輸入用戶名、密碼的登錄界面index.html,它是基于用戶名、密碼的初始身份認證,是合法用戶進入系統的唯一通道;另一類是用戶成功進入系統后的操作界面,統記為operating.cgi,它是用戶完成各種操作的平臺。用戶憑借合法的用戶名、密碼進入系統后,看到的只是他理論上能夠操作的菜單,是否能夠操作取決于再次進行身份認證的成功與否。此次身份認證就是基于Cookie和Session的認證。
通過用戶名、密碼初始認證與后續的請求認證過程如圖1、圖2所示。
該身份認證過程描述及主要實現代碼如下。
1)用戶在登錄界面index.html上提交用戶名、密碼,發出HTTP請求。
2)服務器接收到HTTP請求,驗證用戶提交的信息是否合法。若合法,則服務器將用戶的用戶名、IP地址以及系統自動生成的隨機碼等信息經過RSA算法加密后寫進HTTP的響應頭的Set-Cookie,同時將這些信息也存入服務器端的Session,然后返回HTTP響應;若不合法,則返回驗證失敗的信息。
3)客戶端收到服務器端的HTTP響應后,提取HTTP響應頭Set-Cookie中的信息并存儲在客戶端的Cookie中,等再次向該服務器發出后續請求時連同存儲在客戶端中的Cookie一起發往服務器。
4)服務器接收到客戶端的HTTP請求后,提取并使用RSA算法解密Cookie中的信息,然后將解密后的Cookie信息中的用戶IP地址和系統自動生成隨機碼與服務器端Session中的IP地址和隨機碼相比較,若一致則返回客戶端請求的HTTP響應,否則返回出錯信息。
基于Cookie和Session的身份認證機制的安全性分析 通過上述的實現過程可知,用戶只有通過合法的用戶名、密碼的初始認證后,服務器才能為該用戶生成相應的Cookie和Session信息。因此,即使攻擊者通過惡意程序等手段截獲了Cookie信息,假冒合法用戶的身份進行攻擊也是困難重重。首先,在服務器端與客戶端之間傳送的Cookie信息是經過RSA加密處理之后的,根據RSA加密算法的特點,攻擊者想要破解密文是相當困難的;其次,即使攻擊者破解了Cookie密文,由于Cookie中含有系統自動生成的隨機碼,只要Cookie中的隨機碼和Session中的隨機碼不一致,攻擊者依舊不能訪問系統資源。
因此,在應用系統中使用基于Cookie和Session相結合的身份認證機制,增加了攻擊者利用Cookie的捕獲/重放、Session定置以及跨站請求偽造等手段進行攻擊的難度,在一定程度上提高了系統的安全性。
4 結束語
Cookie是實現身份認證的主要手段。鑒于Cookie機制的不安全性,本文提出并實現了使用Cookie和Session相結合的方法,并使用RSA加密算法對Cookie進行加密的身份認證機制,該機制提高了利用Cookie進行身份認證的安全性,具有一定實用性。
參考文獻
[1]李馥娟.基于Cookies的Web應用分析及其安全研究[J].網絡安全技術與應用,2009(8):88-91.
[2]胡忠望,劉衛東.Cookie應用與個人信息安全研究[J].計算機應用于軟件,2007,24(3):50-53.
[3]劉嘯.基于Cookie欺騙的Session滲透入侵分析及其安全模型研究[D].杭州:浙江大學:10-12.