關(guān)于Cookie的一些思考和理解

關(guān)鍵詞:cookie 安全性 GDPR

可能你最近在訪問一些在歐洲有業(yè)務(wù)來往的網(wǎng)站的時候焦辅,你會發(fā)現(xiàn)會有Cookie的提示轻局,沒錯,最近歐盟GDPR生效成翩,前陣子一直忙于Cookie Privacy的事情氮惯,順便總結(jié)一下Cookie的各個知識點

Cookie叮雳,是站點為了訪客的一些信息來區(qū)分用戶(Identifier)或者傳遞信息,特別是在big data的現(xiàn)在妇汗,更有利于站點site對用戶行為和地區(qū)傾向進(jìn)行大數(shù)據(jù)分析帘不,也可以為推薦系統(tǒng)做前期的基礎(chǔ)數(shù)據(jù)訓(xùn)練集。

Cookie存在哪里杨箭?

一般存在瀏覽器目錄中的文本文件中

Cookie分為多少種寞焙?

  1. 帶失效時間expires的,在下次訪問之前,如果失效時間到期捣郊,會自動清除對應(yīng)cookie辽狈,expiresmaxage的概念差不多,通常兩個時間都是一樣的呛牲,一個是時間刮萌,一個時間長度,前者是HTTP/1.0 protocol娘扩,后者是HTTP/1.1 protocol着茸,為了向下兼容而已,所以琐旁,最好是兩個參數(shù)都設(shè)置
  2. 跟隨session結(jié)束就自動清除的涮阔,這種cookie很常見,通常你會在console看到它的expires時間是1969年的或者所邊當(dāng)前時間還要早的時間灰殴,這種cookies會在會話結(jié)束的同時清除掉

Cookie的工作原理是什么澎语?

前面我們說了Cookie一般存在瀏覽器目錄中的文本文件中,并且會根據(jù)domain分開存放验懊,比如,當(dāng)你輸入jianshu.com的時候尸变,瀏覽器會向jianshu發(fā)送一個request义图,然后server根據(jù)request來返回response,把結(jié)果在顯示器中顯示召烂,當(dāng)你發(fā)送這個request的時候碱工,瀏覽器會尋找當(dāng)前瀏覽器目錄中是否存在jianshu.com的相關(guān)cookie,如果有奏夫,瀏覽器會把Cookie文件中的數(shù)據(jù)放在request header中一起向server發(fā)送怕篷,服務(wù)器收到Cookie數(shù)據(jù),服務(wù)器會根據(jù)你的cookie信息做一些相應(yīng)的處理酗昼,比如第一次訪問的話廊谓,會為你創(chuàng)建一個新的session id,否者來檢測你是否需重新登錄等等操作麻削。

Cookie包含哪些字段蒸痹?

主要包括server、expires呛哟、name叠荠、value、secure扫责、httpOnly榛鼎、path,其中服務(wù)器只想知道name和value字段,其余的字段有的為了存儲者娱,有的為了安全性

如何查看Cookie抡笼?

比如在chrome下打開jianshu.com,F(xiàn)12 -> Application -> Cookies -> http://www.reibang.com

jianshu cookie

也可以在Console里邊輸入document.cookies肺然,但是只顯示非HTTP的cookie name和value蔫缸,沒有其他信息

如何操作cookie?

分為兩種:第一種在前端對cookie進(jìn)行操作际起,以chrome為例子拾碌,可以直接在console里邊對cookie進(jìn)行修改,例如我們將default_font改成Simplified(當(dāng)然這只是舉個例子街望,至于修改完重新發(fā)送請求到j(luò)ianshu server之后會不會有作用校翔,這個取決于jianshu server),F(xiàn)12 -> Console灾前,輸入:

document.cookie = "default_font=Simplified;path=/"

注意:name防症、domain、path一定要對應(yīng)正確哎甲,這里的cookie domain為www.reibang.com蔫敲,所以不需要顯式設(shè)置,結(jié)果如下:

修改后

同樣的也可以刪除cookie炭玫,只需要將expires設(shè)置成比現(xiàn)在早的時間就可以了奈嘿,順便分享一個前端修改指定cookie過期時間為一年的腳本,下面是修改_ga的過期時間吞加,可自行根據(jù)需求修改:

for(i in cookie_list){
    target = cookie_list[i];
    if(target.includes('_ga')){
        var date = new Date();
        var c_time = date.getTime();
        var age = 60*1000*60*24*365; // one year expiration
        date.setTime(c_time + age); 
        document.cookie = target+";expires="+date.toGMTString()+";path=/";
    }
}

第二種是后端服務(wù)器操作裙犹,可以直接在response上面進(jìn)行操作,你可以直接抹掉某個cookie

response.clearCookie('default_font')

這個時候回來的response header就不會帶default_font這個cookie了
也可以修改已存在的cookie過期時間或者加入新的cookie衔憨,nodejs的application可以使用cookie.js

res.setHeader('Set-Cookie', cookie.serialize('my_cookie', 'my_value', {
httpOnly: false,
expires: "Mon, 11 Jun 2018 05:47:25 GMT"
maxAge: 60 * 60 * 24 * 7 // 1 week
}));

這個時候瀏覽器就會接受到一個包含cookie為my_cookie=my_value叶圃,并且過期時間為一個星期的response。

為什么我設(shè)置了cookie沒有生效践图?

首先可能有兩個問題
注意一下domain和path掺冠,必須完全對應(yīng)可以設(shè)置,比如你要修改某一個cookie平项,修改的時候必須指定與其一樣的domain和path才可以生效赫舒,否者不生效,另外闽瓢,當(dāng)前域不可以寫其他域的cookie接癌,子域名除外。

Cookie的安全性

既然cookie這么容易修改扣讼,畢竟cookie輸入個人信息缺猛,容易獲取,就容易被利用,那么我們自然而然會想到安全性問題荔燎,這里我能想到的有四種方式耻姥,在后端服務(wù)器對cookie進(jìn)行適當(dāng)?shù)奶幚恚梢蕴岣遚ookie的安全性:

  1. 在設(shè)置cookie的時候有咨,加上以下參數(shù)琐簇,指明該cookie只用來HTTP請求使用,這個時候前端或者瀏覽器是拿不到這個cookie的座享,也就是使用document.cookie是不會出現(xiàn)的婉商,默認(rèn)為false:
res.setHeader('Set-Cookie', cookie.serialize('my_cookie', 'my_value', {
httpOnly: true,
expires: "Mon, 11 Jun 2018 05:47:25 GMT"
maxAge: 60 * 60 * 24 * 7 // 1 week
}));
  1. 后端設(shè)置以下參數(shù),使得cookie只在https protocol下傳輸渣叛,如果把https改成http丈秩,cookie無法跟隨請求一起發(fā)送到server端,在發(fā)送cookie之前就已啟用了加密傳輸協(xié)議https:
res.setHeader('Set-Cookie', cookie.serialize('my_cookie', 'my_value', {
httpOnly: true,
secure: true,
expires: "Mon, 11 Jun 2018 05:47:25 GMT"
maxAge: 60 * 60 * 24 * 7 // 1 week
}));
  1. 設(shè)置expires的時間不要太長淳衙,如果必要蘑秽,將其設(shè)置成跟隨session的結(jié)束而結(jié)束,默認(rèn)可以不指定expires時間箫攀,或者設(shè)置一個比當(dāng)前時間要早的時間:
res.setHeader('Set-Cookie', cookie.serialize('my_cookie', 'my_value', {
httpOnly: true,
secure: true,
expires: "Thu, 1 Jan 1970 00:00:00 GMT"
}));
  1. 對敏感的cookie信息進(jìn)行加密處理肠牲,防止被有意利用,例如MD5加密

在此靴跛,給各位需要做GDPR的同學(xué)們一個建議埂材,對cookie的控制,最好在server器端處理汤求,避免在前端處理,因為他實際上是一個在線修改而已严拒,那些你希望存在的cookie扬绪,實際上已經(jīng)寫入了訪客瀏覽器目錄中,只是在后續(xù)js處理中被你修改了而已裤唠,這是一種很搞笑的行為挤牛。

** 文章所有步驟都是經(jīng)過實踐檢驗并可行,若有問題种蘸,下方請評論墓赴。

——END——
作者 : Eason,專注各種技術(shù)航瞭、平臺诫硕、集成,不滿現(xiàn)狀刊侯,喜歡改改改
文章章办、技術(shù)合作
Email : eason.lau02@hotmail.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子藕届,更是在濱河造成了極大的恐慌挪蹭,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件休偶,死亡現(xiàn)場離奇詭異梁厉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)踏兜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門词顾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庇麦,你說我怎么就攤上這事计技。” “怎么了山橄?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵垮媒,是天一觀的道長。 經(jīng)常有香客問我航棱,道長睡雇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任饮醇,我火速辦了婚禮它抱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朴艰。我一直安慰自己观蓄,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布祠墅。 她就那樣靜靜地躺著侮穿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毁嗦。 梳的紋絲不亂的頭發(fā)上亲茅,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音狗准,去河邊找鬼克锣。 笑死,一個胖子當(dāng)著我的面吹牛腔长,可吹牛的內(nèi)容都是我干的袭祟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捞附,長吁一口氣:“原來是場噩夢啊……” “哼榕酒!你這毒婦竟也來了胚膊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤想鹰,失蹤者是張志新(化名)和其女友劉穎紊婉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辑舷,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡喻犁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了何缓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肢础。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碌廓,靈堂內(nèi)的尸體忽然破棺而出传轰,到底是詐尸還是另有隱情,我是刑警寧澤谷婆,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布慨蛙,位于F島的核電站,受9級特大地震影響纪挎,放射性物質(zhì)發(fā)生泄漏期贫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一异袄、第九天 我趴在偏房一處隱蔽的房頂上張望通砍。 院中可真熱鬧,春花似錦烤蜕、人聲如沸封孙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敛瓷。三九已至,卻和暖如春斑匪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锋勺。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工蚀瘸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庶橱。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓贮勃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苏章。 傳聞我的和親對象是個殘疾皇子寂嘉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容