談 Cookie 的細部特性吧。
Cookie 的運作是這樣的:
由於 Cookie 是儲存在 Client 端,所以一些比較機密的資料不建議存放在 Cookie 中,例如有套軟體 IECookiesView 就可以輕易的將一台電腦中的所有 Cookie 取出,如果你的 Cookie 中有帳號、密碼、身份證字號等資料,那就真的全都露啦!如果真的要放也要加密過後再放比較安全。
網路上有個常見的攻擊手法叫做 Session hijacking ,就是透過 JavaScript 將 Cookie 偷偷傳遞出來,然後冒用別人的 Cookie 來登入,所以在開發 Web 應用程式的時候,千萬千萬要注意,尤其是讓使用者上傳資料的時候,一定要避免使用者偷偷上傳 JavaScript 的程式,資料儲存到資料庫之前一定要做檢查,或是將非法的標籤(如:<script>)移除。
Session hijacking 攻擊的手法模擬摘要如下:
通常 Cookie 有兩種類型:Persistent Cookie 與 Session Cookie
1. Persistent Cookie
這種類型的 Cookie 可以設定存在 Browser 一段時間(明確指定 Cookie 的 Expires 時間),如果你設定的時間夠長(例如:一天),即便 Browser 全部關閉或重開機後再開啟也還會存在。
例如以下程式:
Response.Cookies["Email"].Value = TextBox1.Text;
Response.Cookies["Email"].Expires = DateTime.Now.AddDays(1);
2. Session Cookie
這種 Cookie 是當不特別指定 Expires (過期時間) 時,該 Cookie 只會存在目前這個 Browser 的續存期間(Session),只要 Browser 全部關閉後 Cookie 會自動被清除。
例如以下程式:
Response.Cookies["Username"].Value = DateTime.Now.ToString();
在 RFC 2109 HTTP State Management Mechanism 規範的 6.3 Implementation Limits 章節中有定義 User Agent (瀏覽器) 針對 Cookie 的最低儲存量,但是每一個 Browser 在實做的時候還是有其限制,大多 Browser 都僅實做最低的儲存量,因為使用過多的 Cookie 會消耗頻寬,反而沒有效率,RFC 上面的定義是這樣的:
當你設定 Cookie 的大小超出限制,瀏覽器就會丟棄整個 Cookie,而不是將你設定的值取可以儲存的部分。
相關網址: