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