看好你的門-客戶端傳數據(6)-不安全的cookie


首先需要聲明,本文純屬一個毫無遠見和真才實學的小小開發人員的愚昧見解,僅供用於web系統安全方面的參考。

1、 簡單說明

http cookie是通過客戶端傳送數據的一種常用機制。和隱藏表單字段一樣,http cookie一般並不顯示在屏幕上。相比url參數的方式,貌似很多普通用戶也不知道http cookie在那里,看起來安全性要強不少。

與此同時,很多開發人員也不知道cookie在那里,雖然我們經常用。
一個cookie就是存儲在用戶主機瀏覽器中的一小段文本文件。Cookies是純文本形式,它們不包含任何可執行代碼。一個Web頁面或服務器告之瀏覽器來將這些信息存儲並且基於一系列規則在之后的每個請求中都將該信息返回至服務器。Web服務器之后可以利用這些信息來標識用戶。多數需要登錄的站點通常會在你的認證信息通過后來設置一個cookie,之后只要這個cookie存在並且合法,你就可以自由的瀏覽這個站點的所有部分。再次,cookie只是包含了數據,就其本身而言並不有害。

2、 創建cookie:

通過HTTP的Set-Cookie消息頭,Web服務器可以指定存儲一個cookie。Set-Cookie消息的格式如下面的字符串(中括號中的部分都是可選的)
Set-Cookie:value [ ;expires=date][ ;domain=domain][ ;path=path][ ;secure]

消息頭的第一部分,value部分,通常是一個name=value格式的字符串。事實上,原始手冊指示這是應該使用的格式,但是瀏覽器對cookie的所有值並不會按此格式校驗。實際上,你可以指定一個不包含等號的字符串並且它同樣會被存儲。然而,通常性的使用方式是以name=value的格式(並且多數的接口只支持該格式)來指定cookie的值。

   當一個cookie存在,並且可選條件允許的話,該cookie的值會在接下來的每個請求中被發送至服務器。cookie的值被存儲在名為Cookie的HTTP消息頭中,並且只包含了cookie的值,其它的選項全部被去除。

通過Set-Cookie指定的選項只是應用於瀏覽器端,一旦選項被設置后便不會被服務器重新取回。cookie的值與Set-Cookie中指定的值是完全一樣的字符串;對於這些值不會有更近一步的解析或轉碼操作。如果在指定的請求中有多個cookies,那么它們會被分號和空格分開。

expires選項,其指定了cookie何時不會再被發送到服務器端的,因此該cookie可能會被瀏覽器刪掉。該選項所對應的值是一個格式為Wdy,DD-Mon–YYYY HH:MM:SS GMT的值。
沒有expires選項的時候,cookie的壽命僅限於單一的會話中。瀏覽器的關閉意味這一次會話的結束,所以會話cookie只存在於瀏覽器保持打開的狀態之下。這就是為什么當你登錄到一個web應用時經常看到一個checkbox,詢問你是否選擇存儲你的登錄信息:如果你選擇是的話,那么一個expires選項會被附加到登錄的cookie中。如果expires選項設置了一個過去的時間點,那么這個cookie會被立即刪除。
這個屬性對安全來說很重要,是除了cookie內容之外最重要的一個屬性。

3、 不安全的cookie表現形式

不安全的cookie表現形式非常簡單,明碼的和弱加密的cookie。
隨着時代的發展,大家為了追求更加友好的用戶體驗,cookie的使用我個人感覺越來越多。比如在很多的網站都使用了默認登陸等,這些都是通過cookie來實現的。

4、 被攻擊

明碼的和弱加密的cookie非常容易被攻擊。
另外一種攻擊方法,把一個高權限用戶的長期cookie,替換一個低權限用戶的cookie。這樣這個低權限用戶就擁有了高權限用戶的部分權限。
如果在系統內部沒有合適的二次驗證(現在很多主流網站,都有登錄密碼和支付密碼,登陸密碼可以保持在cookie中,如果沒有支付密碼….)
cookie信息非常容易被偷天換日。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com