什麼是Cookie

網頁伺服器以Set-Cookie標頭讓瀏覽器保存的、由名稱與值組成的小筆資料。之後瀏覽器向同一網站送出請求時,會以Cookie標頭自動附上。為了在無狀態的HTTP上維持登入狀態,常用來存放工作階段ID。以Secure(只在HTTPS時傳送)、HttpOnly(讓指令碼無法讀取)、SameSite(是否附加到從其他網站發起的請求)、Expires與Max-Age(有效期限)等屬性指定處理方式。

日文名稱: Cookie

「Cookie」出現在2領域的6道練習題中(Web技術基礎, 資訊安全基礎等)。

這個名詞所屬的領域: Web技術基礎

運作方式

伺服器在回應中加上「Set-Cookie: sid=…」這類標頭,瀏覽器加以保存。之後瀏覽器向同一網站(由Domain與Path屬性決定的範圍)送出請求時,會自動附上「Cookie: sid=…」。伺服器以收到的工作階段ID為線索,找出保存在伺服器端的使用者資訊。沒有指定有效期限的Cookie,一般在關閉瀏覽器時就會消失。

為了安全的屬性

加上Secure後,只在HTTPS通訊時傳送,可防止值被竊聽得知。加上HttpOnly後,網頁的JavaScript無法讀取,可減少工作階段ID因XSS被竊取的損害。SameSite以Strict、Lax、None指定是否把Cookie附加到從其他網站發起的請求,是對付讓使用者送出非預期請求之攻擊的對策之一。

與localStorage的差異

localStorage也是在瀏覽器中保存資料的機制,但不會自動附加到請求,而是由JavaScript讀寫使用。Cookie每個一般最多約4 KB,容量小,而且每次向該網站送出請求都會附上,放入大筆資料會增加通訊量。工作階段ID這類驗證資訊,一般放在指令碼無法讀取的HttpOnly Cookie中。

練習Cookie的題目

瀏覽器的localStorage與Cookie的差異,下列何者正確?

  1. AlocalStorage的資料不會自動附加到請求,而是由同源網頁的JavaScript讀寫使用
  2. BlocalStorage的資料也與Cookie一樣,每次向同一網站送出請求時都會放進標頭,自動送往伺服器
  3. ClocalStorage也能加上HttpOnly屬性,因此即使放入工作階段ID,網頁的指令碼也無法讀取
查看答案與解析

正確答案:A. localStorage的資料不會自動附加到請求,而是由同源網頁的JavaScript讀寫使用

localStorage是依來源保存字串鍵與值的瀏覽器儲存區,沒有設定有效期限的機制,一般會一直保留到刪除為止。它不會自動送往伺服器,想傳送時要以JavaScript放進請求中。Cookie每個一般最多約4 KB,容量小,而且每次請求都會自動傳送;相對地,localStorage可以放較大的資料。不過網頁的JavaScript隨時都能讀取,因此若有XSS,內容就會被竊取。放入用於驗證的值時,必須考慮這個風險。

常見問題

停用Cookie會怎樣?

無法傳遞工作階段ID,因此許多網站無法維持登入狀態。購物車的內容或顯示設定等以Cookie記住的資訊也無法保留。

什麼是第三方Cookie?

是由目前瀏覽的網頁以外的網站(例如投放廣告的網站)設定的Cookie。由於一直被用來跨多個網站追蹤使用者的行為,為了保護隱私,有些瀏覽器預設不傳送或加以限制。

解析中的「Cookie」

出現「Cookie」的題目(6題)

  1. 關於以上方標頭設定的Cookie,下列說明何者正確?
  2. 瀏覽器的localStorage與Cookie的差異,下列何者正確?
  3. HTTP是無狀態的協定。關於這一點以及網站維持登入狀態的一般方法,下列說明何者正確?
  4. 某留言板網頁應用程式有一個漏洞:使用者張貼的文章中所含的指令碼,會在其他瀏覽者的瀏覽器中執行。此漏洞的名稱與根本對策的組合,正確的是哪一項?
  5. 某網頁應用程式有一個漏洞:保持登入狀態的使用者若開啟攻擊者準備的陷阱網頁,使用者的瀏覽器就會向正規網站送出使用者並未意圖的匯款或設定變更請求。下列何者是適當的對策?
  6. 網頁應用程式若在登入前後持續使用相同的工作階段ID,攻擊者可能讓使用者使用攻擊者事先準備的工作階段ID,並在使用者登入後以該ID冒充使用者。對這種攻擊最適當的對策是哪一項?

相關名詞

跨網站指令碼(XSS) HTTP(超文字傳輸協定) 反向代理 文件物件模型(DOM) 同源政策 伺服器端算繪(SSR) 事件迴圈 跨來源資源共用(CORS) HTTP方法 HTTP狀態碼

前往名詞解釋列表