溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Cookie的SameSite屬性

發(fā)布時間:2021-10-22 13:35:24 來源:億速云 閱讀:178 作者:iii 欄目:開發(fā)技術

本篇內容介紹了“如何理解Cookie的SameSite屬性”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、CSRF 攻擊是什么?

Cookie 往往用來存儲用戶的身份信息,惡意網站可以設法偽造帶有正確 Cookie 的 HTTP 請求,這就是 CSRF 攻擊。

舉例來說,用戶登陸了銀行網站your-bank.com,銀行服務器發(fā)來了一個 Cookie。

Set-Cookie:id=a3fWa;

用戶后來又訪問了惡意網站malicious.com,上面有一個表單。

<form action="your-bank.com/transfer" method="POST">
  ...
</form>

用戶一旦被誘騙發(fā)送這個表單,銀行網站就會收到帶有正確 Cookie 的請求。為了防止這種攻擊,表單一般都帶有一個隨機 token,告訴服務器這是真實請求。

<form action="your-bank.com/transfer" method="POST">
  <input type="hidden" name="token" value="dad3weg34">
  ...
</form>

這種第三方網站引導發(fā)出的 Cookie,就稱為第三方 Cookie。它除了用于 CSRF 攻擊,還可以用于用戶追蹤。

比如,F(xiàn)acebook 在第三方網站插入一張看不見的圖片。

<img src="facebook.com" >

瀏覽器加載上面代碼時,就會向 Facebook 發(fā)出帶有 Cookie 的請求,從而 Facebook 就會知道你是誰,訪問了什么網站。

二、SameSite 屬性

Cookie 的SameSite屬性用來限制第三方 Cookie,從而減少安全風險。

它可以設置三個值。

  • Strict

  • Lax

  • None

2.1 Strict

Strict最為嚴格,完全禁止第三方 Cookie,跨站點時,任何情況下都不會發(fā)送 Cookie。換言之,只有當前網頁的 URL 與請求目標一致,才會帶上 Cookie。

Set-Cookie: CookieName=CookieValue; SameSite=Strict;

這個規(guī)則過于嚴格,可能造成非常不好的用戶體驗。比如,當前網頁有一個 GitHub 鏈接,用戶點擊跳轉就不會帶有 GitHub 的 Cookie,跳轉過去總是未登陸狀態(tài)。

2.2 Lax

Lax規(guī)則稍稍放寬,大多數(shù)情況也是不發(fā)送第三方 Cookie,但是導航到目標網址的 Get 請求除外。

Set-Cookie: CookieName=CookieValue; SameSite=Lax;

導航到目標網址的 GET 請求,只包括三種情況:鏈接,預加載請求,GET 表單。詳見下表。


請求類型示例正常情況Lax
鏈接<a href="..." rel="external nofollow"  rel="external nofollow" ></a>發(fā)送 Cookie發(fā)送 Cookie
預加載<link rel="prerender" href="..." rel="external nofollow"  rel="external nofollow" />發(fā)送 Cookie發(fā)送 Cookie
GET 表單<form method="GET" action="...">發(fā)送 Cookie發(fā)送 Cookie
POST 表單<form method="POST" action="...">發(fā)送 Cookie不發(fā)送
iframe<iframe src="..."></iframe>發(fā)送 Cookie不發(fā)送
AJAX$.get("...")發(fā)送 Cookie不發(fā)送
Image<img src="...">發(fā)送 Cookie不發(fā)送

設置了StrictLax以后,基本就杜絕了 CSRF 攻擊。當然,前提是用戶瀏覽器支持 SameSite 屬性。

2.3 None

Chrome 計劃將Lax變?yōu)槟J設置。這時,網站可以選擇顯式關閉SameSite屬性,將其設為None。不過,前提是必須同時設置Secure屬性(Cookie 只能通過 HTTPS 協(xié)議發(fā)送),否則無效。

下面的設置無效。

Set-Cookie: widget_session=abc123; SameSite=None

下面的設置有效。

Set-Cookie: widget_session=abc123; SameSite=None; Secure

“如何理解Cookie的SameSite屬性”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI