? ? ? ?cookie可以在瀏覽器關(guān)閉再打開后仍然有效,也可以隨著瀏覽器窗口關(guān)閉而被立即刪除。cookie由Web應(yīng)用負責(zé)維護,保存在瀏覽器的本地數(shù)據(jù)庫里,相應(yīng)的數(shù)據(jù)由Web應(yīng)用設(shè)置和管理。Web應(yīng)用請求瀏覽器為它在一段時間內(nèi)保存一點數(shù)據(jù)。當(dāng)瀏覽器重新打開相應(yīng)cookie對應(yīng)的域時,就會在每一個HTTP請求中附加該cookie一起發(fā)送。這樣,瀏覽器就可以識別訪問網(wǎng)站的特定用戶,從而實現(xiàn)定向廣告,以及在用戶重新訪問同一網(wǎng)站時顯示歡迎消息。
? ? ? ?cookie屬性用于幫助決定什么時候應(yīng)該把cookie發(fā)送回服務(wù)器,以及cookie應(yīng)該存活多長時間。這種屬性的組合用于限制用戶對攻擊者的暴露程度,同時也確保數(shù)據(jù)不會保存得比需要的時間還長。正如對開發(fā)者來說,理解這些屬性對用戶與應(yīng)用交互的影響非常重要,理解它們的功能對我們來說也同樣重要。那么cookie具有哪些屬性?這些屬性又有哪些功能呢?下面南昌網(wǎng)絡(luò)公司小編就來跟大家探討一下:
? ? ? ?一、失效時間屬性
? ? ? ?失效時間對應(yīng)的屬性是Expires,它幫助瀏覽器決定保存cookie的時間。cookie的生命周期可以長至瀏覽器多次重啟都有效,也可以短至只要瀏覽器一關(guān)閉就結(jié)束。不設(shè)置Expires屬性就可以實現(xiàn)不在磁盤上保存cookie,而一旦瀏覽器關(guān)閉就銷毀cookie數(shù)據(jù)。這種方法常用于登錄會話,以及其他不需要在多次瀏覽器重啟過程中仍然保持的會話。
? ? ? ?對追蹤用戶而言,會話cookie是理想的選擇。如果應(yīng)用想在用戶每次返回應(yīng)用時都區(qū)分識別他們,那么持久cookie更合適。持久cookie會設(shè)置一下未來的刪除cookie的時間。設(shè)置時間可長可短,從幾秒鐘到比用戶存續(xù)時間還長都可以。
? ? ? ?了解了cookie的類型,才能更好地攻擊用戶會話。在竊取會話的時候,cookie的存活時間和會話的超時值(timeout value)決定了你有多長時間可以維持訪問。過短的會話超時時間會限制cookie的可用性,即使cookie的生命周期很長也沒有用。在攻擊Web瀏覽器的過程中,理解這些細微的差別非常重要。
? ? ? ?二、HttpOnly標簽
? ? ? ?HttpOnly標簽用于阻止JavaScript及其他腳本語言訪問cookie。HttpOnly告訴瀏覽器只能通過HTTP協(xié)議傳輸cookie,不能在DOM中訪問cookie。這樣可以防止XSS攻擊向外部發(fā)送cookie數(shù)據(jù),也可以防止渲染HTML代碼時修改cookie。下面我們就擴展前面的代碼片段,進一步認識這個標簽。
? ? ? ?原來的Ruby代碼設(shè)置了兩個帶HttpOnly標簽的會話cookie,可以通過在DOM中訪問cookie來驗證這一點。打開Firebug控制臺,在命令編輯器中輸入document.cookie,然后單擊Run。結(jié)果就返回一個空值,如下圖所示。
通過控制臺查看cookie
? ? ? ?class CookieDemo < Sinatra::Base
? ? ? ?get "/" do
? ? ? ?response.set_cookie "session_cookie", {:value => 'yes',
? ? ? ?:domain => 'browserhacker.com',
? ? ? ?:path => '/' }
? ? ? ?response.set_cookie "persistent_cookie", {:value => 'yes',
? ? ? ?:domain => 'browserhacker.com',
? ? ? ?:path => '/', :expires => Time.now + (60 * 60 * 7) }
? ? ? ?"n" + request.cookies.to_json + "nn"
? ? ? ?end
? ? ? ?end
? ? ? ?重新加載頁面,再次在Firebug控制臺中執(zhí)行document.cookie,就會看到響應(yīng)中包含的cookie了,如下圖所示。
通過控制臺查看未設(shè)置HttpOnly標簽的cookie
? ? ? ?三、理解安全標簽
? ? ? ?假設(shè)有一個電子商務(wù)應(yīng)用托管在browserhacker.com上,這個應(yīng)用需要跟蹤購物車,并在用戶訪問結(jié)賬頁面時對用戶進行認證。此時,如果能夠通過HTTPS來實現(xiàn)結(jié)賬功能就更好了。
? ? ? ?Secure這個安全標簽就是用于限制只能通過SSL加密的連接發(fā)送cookie。設(shè)置這個標簽不僅能防止不適當(dāng)?shù)厥褂胏ookie,也可以阻止別有用心的人窺探cookie。
? ? ? ?四、理解路徑屬性
? ? ? ?路徑(Path)屬性加上域(Domain)標簽,用于表示cookie適用的范圍。大型的應(yīng)用通常需要寬泛的域或路徑,以便用戶能夠在站點的多個子域之間跳轉(zhuǎn)。
下面還以我們的電子商務(wù)應(yīng)用browserhacker.com為例。理想的情況是使用兩個cookie:一個會話cookie跟蹤用戶對所有browserhacker.com域的訪問,另一個會話cookie跟蹤在browserhacker.com中認證后的用戶,將其限制于只能訪問/checkout路徑。通過將cookie限制到特定的路徑,再加上使用HttpOnly等安全功能,暴露結(jié)賬環(huán)節(jié)私密信息的可能性就會大大降低。
? ? ? ?可惜現(xiàn)實并沒有那么美好。只要內(nèi)容存在XSS利用漏洞,那么就沒辦法阻止通過打開內(nèi)嵌的框架向限定的路徑注入JavaScript,然后訪問相應(yīng)的cookie。即使子內(nèi)嵌框架處于SOP保護之下,cookie依舊會曝光。
? ? ? ?關(guān)于cookie的屬性及其屬性功能,南昌網(wǎng)絡(luò)公司小編就為大家介紹到這里,了解了這些屬性后相信開發(fā)人員在Web應(yīng)用中就可以運用自如了。以上cookie方面的內(nèi)容如果大家還有哪些不明白的地方,大家隨時可來電和我們聯(lián)系。有想了解更多關(guān)于網(wǎng)站建設(shè)、微信開發(fā)、手機APP開發(fā)等方面資訊的朋友,歡迎關(guān)注百恒網(wǎng)絡(luò)網(wǎng)站動態(tài),更多精彩內(nèi)容與您分享!