讀Cookie安全後的讀後感

技術小胖子發表於2017-12-14

引用 “Cookie是一個神奇的機制,同域內瀏覽器中發出的任何一個請求都會帶上Cookie,無論請求什麼資源,請求時,Cookie出現在請求頭的Cookie欄位中。服務端響應頭的Set-Cookie欄位可以新增、修改和刪除Cookie,大多數情況下,客戶端通過JavaScript也可以新增、修改和刪除Cookie。”

 

這句話基本上說了cookie是什麼 和怎樣進行操作就不重複了

 

現在越來越多的黑闊用xss進行盜取使用者或者管理員的cookie 盜取目標網站的使用者許可權

 

Cookie的重要欄位如下:

[name][value][domain][path][expires][httponly][secure]

 

其含義依次是:名稱、值、所屬域名、所屬相對根路徑、過期時間、是否有HttpOnly標誌、是否有Secure標誌。

 

有幾個欄位是有專門的機制的

 

一個一個來

 

0×01子域Cookie機制

設定Domain 的值 可以進行共享cookie (不填為預設 本域 不能為其他域名)

比如 你是www.fuck.com但你 domain = bingdao.com 那是行不通的

 

在查關於 子域cookie機制時

找到2個相關的博文

http://blog.csdn.net/civilman/article/details/5286426(跨子域的Cookie的清除問題 在同一個環境下的2個網站 1.fuck.com 和 2.fuck.com 共用同一組cookie 但導致不能登出的問題的解決方法)

 

http://hi.baidu.com/thinkinginlamp/item/b1273444b6631ff4dc0f6ce6(子域和根域下的同名Cookie) 在子域下請求時,瀏覽器會把子域和根域下的Cookie一起傳送到伺服器,那如果子域和根域下有一個同名Cookie,當我們在PHP裡使 用$_COOKIE訪問時,到底生效的是哪個呢?

我也有點感興趣就同這個博文實驗了下

 

我直接貼圖和操作了

 

235931397.jpg

我是在本機操作的 於是就用switchhosts! 更改了下環境 設定了一個虛擬域名

 

設定虛擬域名 (因為畢竟是子域和根域下的Cookie的問題 IP不好實現)

 

編寫設定Cookie的PHP指令碼,先設定子域,再設定根域:

235934958.jpg

再編寫瀏覽Cookie的指令碼:

235936510.jpg

然後訪問1.php 生成cookie 再訪問2.php獲取cookie

235938183.jpg

結果顯示有效的是子域下的Cookie。

___________________________________________

在子域下請求時,瀏覽器會把子域和根域下的Cookie一起傳送到伺服器,那如果子域和根域下有一個同名Cookie,當我們在PHP裡使 用$_COOKIE訪問時,到底生效的是哪個呢?

大家再看下我們的問題 所以我們再將先後順序換下

235941186.jpg

235943690.jpg

答案很明顯了

第一次先設定子域,再設定根域:請求頭Cookie的值是bar=www;bar=2b,結果有效的是bar=www

第二次先設定根域,再設定子域:請求頭Cookie的值是bar=2b;bar=www,結果有效的是bar=2b

同名時是根據設定cookie的先後順序來也就是哪個在前哪個生效,後面的會被忽略。

0×02路徑Cookie機制

“path欄位的機制 ,設定Cookie時,如果不指定path的值,預設就是目標頁面的路徑。”

看就看得懂.

 

 

0x03HttpOnly Cookie機制

“HttpOnly是指僅在HTTP層面上傳輸的Cookie,當設定了HttpOnly標誌後,客戶端指令碼就無法讀寫該Cookie,這樣能有效地防禦XSS攻擊獲取Cookie。

 

<?php

setcookie(“test”, 1, time()+3600, “”, “”, 0); // 設定普通Cookie

setcookie(“test_http”, 1, time()+3600, “”, “”, 0, 1);

// 第7個引數(這裡的最後一個)是HttpOnly標誌,0為關閉,1為開啟,預設為0

?>

但還是有突破的方法

 

(1)檢視phpinfo.php

 

235945319.jpg

本地測試的

 

 

 

(2)Django應用的除錯資訊,沒進行測試- –

(3)CVE-2012-0053關於Apache Http Server 400錯誤暴露HttpOnly Cookie 本地木有apache環境 沒有測試…. 大家有興趣自己測試吧..

 

0×04 Secure Cookie機制

指的是設定了Secure標誌的Cookie僅在HTTPS層面上安全傳輸,如果請求是HTTP的,就不會帶上這個Cookie,這樣能降低重要的Cookie被中間人截獲的風險。

Secure Cookie對於客戶端指令碼來說是可讀寫的。

    本文轉自Tar0 51CTO部落格,原文連結http://blog.51cto.com/tar0cissp/1259406:,如需轉載請自行聯絡原作者