佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > nginx cookie有效期討論小結(jié)

nginx cookie有效期討論小結(jié)

熱門(mén)標(biāo)簽:檢查注冊(cè)表項(xiàng) 阿里云 使用U盤(pán)裝系統(tǒng) 百度競(jìng)價(jià)點(diǎn)擊價(jià)格的計(jì)算公式 美圖手機(jī) 網(wǎng)站建設(shè) 智能手機(jī) 硅谷的囚徒呼叫中心

每一次訪問(wèn)都會(huì)在瀏覽器生成Cookie,那么Cookie的存在對(duì)于用戶來(lái)說(shuō)是好還是壞呢?說(shuō)實(shí)話,這玩意的存在確實(shí)會(huì)帶來(lái)一系列的問(wèn)題,有趣的是幾乎每個(gè)站點(diǎn)都難以離開(kāi)Cookie,由于Cookie的使用因其貌似簡(jiǎn)單,而很容易被人輕視。最近在開(kāi)發(fā)過(guò)程中,審視應(yīng)用中的Cookie代碼,幾乎只需要很小的代價(jià)就可以獲得巨大的安全收益。因此寫(xiě)下這份筆記加深記憶。

cookie的安全隱患

在實(shí)際的應(yīng)用場(chǎng)景中,Cookie被用來(lái)做得最多的一件事是保持身份認(rèn)證的服務(wù)端狀態(tài)。這種保持可能是基于會(huì)話Session的,也有可能是持久性的。然而不管哪一種,身份認(rèn)證Cookie中包含的服務(wù)端票據(jù)Ticket一旦泄露,那么服務(wù)端將很難區(qū)分帶有此票據(jù)的用戶請(qǐng)求是來(lái)自于真實(shí)的用戶,或者是來(lái)自惡意的***者。

在實(shí)際案例中,造成Cookie泄露最多的途徑,是通過(guò)跨站腳本(如 XSS, Cross Site Script)漏洞。者可以通過(guò)一小段JavaScript代碼,偷竊到代表用戶身份的重要的Cookie標(biāo)識(shí)。由于跨站腳本漏洞是如此的普遍(不要以為簡(jiǎn)單的HTML Encode 就可以避免被跨站,跨站是一門(mén)很深的學(xué)問(wèn),以至于在業(yè)界衍生出一個(gè)專(zhuān)用的名詞:跨站師),幾乎每一個(gè)網(wǎng)站都無(wú)法避免,所以這種方式是實(shí)際中被普遍使用的一種手段。

事實(shí)上避免出現(xiàn)這種問(wèn)題的首要秘訣就是盡所有的可能,給你的Cookie加上HttpOnly的標(biāo)簽。HttpOnly 的具體使用不在本文的討論范圍內(nèi)。

Cookie 的工作原理

第一次訪問(wèn)網(wǎng)站的時(shí)候,瀏覽器發(fā)出請(qǐng)求,服務(wù)器響應(yīng)請(qǐng)求后,會(huì)將Cookie放入到響應(yīng)請(qǐng)求中,在瀏覽器第二次發(fā)請(qǐng)求的時(shí)候,會(huì)把Cookie帶過(guò)去,服務(wù)端會(huì)辨別用戶身份,當(dāng)然服務(wù)器也可以修改Cookie內(nèi)容.

Cookie 的生命周期

創(chuàng)建Cookie的時(shí)候,會(huì)給Cookie指定一個(gè)值:Expire,它就是指定Cookie的有效期,也就是Cookie的生命周期,超出設(shè)置的這個(gè)生命周期,Cookie就會(huì)被清除。如果給這個(gè)值Expire設(shè)置為0或者負(fù)值,那么這樣的設(shè)置就是在關(guān)閉瀏覽器時(shí),就會(huì)清除Cookie,這種方式更加安全。

修改cookie有效期

通常情況下,我們的web應(yīng)用服務(wù)都會(huì)通過(guò)nginx進(jìn)行發(fā)布,這個(gè)時(shí)候,我們可以通過(guò)在nginx上面進(jìn)行配置文件的修改來(lái)改變cookie的有效期,由于筆者最近在基于openresty對(duì)nginx進(jìn)行功能開(kāi)發(fā)。正好趁此機(jī)會(huì)展開(kāi)對(duì)Cookie有效期的狀態(tài)測(cè)試.

上文在Cookie的生命周期中提到為了有效期的安全性,我們可以為Cookie設(shè)置合理的有效期。如為0或者負(fù)值,那么其效果是怎樣的呢?不妨看一下

修改思路

利用Openrestyresty.cookie進(jìn)行修改。該庫(kù)是用來(lái)對(duì)OpenRestyHTTP cookie操作??梢杂脕?lái)為Nginx解析HTTP Cookie header,并返回Cookie中的每個(gè)字段。比如設(shè)置name,value,httponly等屬性

有效期為24h

這里將expires設(shè)置為有效期是一天(24h)即當(dāng)前系統(tǒng)時(shí)間(ngx.time())加24h

 local cookie = resty_cookie:new()

 local ok, err = cookie:set({
  key = "middle_session",
  value = session,
  path = "/",
  secure = false,
  httponly = true,
  expires = ngx.cookie_time(ngx.time() + 60 * 60 * 24),
  domain = ngx.host,
 })

效果

在這里可以看到我們cookie的有效時(shí)間為5月13號(hào)的14點(diǎn)04分,說(shuō)明我們的修改配置是有效的,可以通過(guò)該參數(shù)進(jìn)行Cookie修改,只要到達(dá)這個(gè)時(shí)間點(diǎn),該Cookie便會(huì)失效,此時(shí)用戶需要重新登錄。

有效期為創(chuàng)世紀(jì)

這里將expires設(shè)置為有效期是-1,這里可以觀察到cookie使用的時(shí)間的是1970年,也就是UNIX紀(jì)元的元時(shí)間

 local cookie = resty_cookie:new()

 local ok, err = cookie:set({
  key = "middle_session",
  value = session,
  path = "/",
  secure = false,
  httponly = true,
  expires = ngx.cookie_time(-1),
  domain = ngx.host,
 })

從下圖中可以看到Cookie有效期是1970年1月1號(hào),這個(gè)時(shí)間點(diǎn)毫無(wú)懸念的已經(jīng)過(guò)時(shí)了,當(dāng)然了,在生產(chǎn)環(huán)境中這么配置。是要被關(guān)進(jìn)小黑屋探討人生價(jià)值的,用戶遇到這樣的Cookie配置是無(wú)論如何都無(wú)法登陸成功的

有效期為當(dāng)前

因?yàn)?code>ngx.cookie_time會(huì)返回一個(gè)格式化的字符串,可以用作Cookie過(guò)期時(shí)間,我們自己手動(dòng)指定過(guò)期時(shí)間。通過(guò)這個(gè)方法可以測(cè)試上文說(shuō)到的Cookie自動(dòng)清除的效果

指定過(guò)期時(shí)間為-1

 local cookie = resty_cookie:new()

 local ok, err = cookie:set({
  key = "middle_session",
  value = session,
  path = "/",
  secure = false,
  httponly = true,
  expires = -1,
  domain = ngx.host,
 })

指定過(guò)期時(shí)間為0

 local cookie = resty_cookie:new()

 local ok, err = cookie:set({
  key = "middle_session",
  value = session,
  path = "/",
  secure = false,
  httponly = true,
  expires = 0,
  domain = ngx.host,
 })

結(jié)論

這里配置-10在現(xiàn)實(shí)意義上跟配置元時(shí)間是一樣的,不過(guò)好處在于,不用關(guān)小黑屋啦。Cookie只在當(dāng)前頁(yè)面上有效,一旦關(guān)閉瀏覽器,這個(gè)Cookie就會(huì)被瀏覽器清除,此時(shí)不用再考慮安全性問(wèn)題。

參考文檔:

Cookie 安全漫談 https://www.infoq.cn/article/cookie-security

把cookie聊清楚 https://juejin.im/post/59d1f59bf265da06700b0934

淺談cookie安全 https://zhuanlan.zhihu.com/p/58666986

到此這篇關(guān)于nginx cookie有效期討論小結(jié)的文章就介紹到這了,更多相關(guān)nginx cookie有效期 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:湖北 煙臺(tái) 懷化 通遼 山南 黃山 賀州 湘潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《nginx cookie有效期討論小結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    原平市| 枞阳县| 深圳市| 新乐市| 藁城市| 礼泉县| 宁远县| 绥滨县| 武功县| 根河市| 玛沁县| 奉贤区| 浪卡子县| 博爱县| 南岸区| 木里| 万宁市| 德昌县| 城固县| 陇西县| 汕尾市| 永嘉县| 晋江市| 淄博市| 牡丹江市| 利津县| 达拉特旗| 涞水县| 仲巴县| 南城县| 宁海县| 乌拉特中旗| 井陉县| 永兴县| 福海县| 铜山县| 乐昌市| 凤庆县| 历史| 丰原市| 林周县|