Cookie SameSite 屬性

admin發表於2019-11-18

SameSite是Cookie最新增加屬性,用於限制第三方Cookie。

可以有效的遏制CSRF攻擊,關於此攻擊具體參閱CSRF 攻擊與防禦一章節。

一.第三方Cookie:

首先我們要了解一下什麼是第三方Cookie。

(1).存在網站A、B和C。

(2).A中的URL可能是指向本站,也可能是指向B或者C。

(3).指向本站A的是第一方請求,指向B或者C的是第三方請求。

簡單程式碼示例如下:

[HTML] 純文字檢視 複製程式碼
<a href="a.com/page.html">第一方請求</a>
<a href="b.com/page.html">第三方請求</a>
<a href="c.com/page.html">第三方請求</a>

在A站分別向自身、B和C站傳送了請求,這就是第一方與第三方請求。

明白了第三方請求,那麼也就很容易理解什麼是第三方Cookie。

第一方請求和第三方請求都會附帶上各自的Cookie,第三方請求附帶的Cookie稱之為第三方Cookie。

CSRF攻擊就是利用第三方Cookie完成的,Cookie的SameSite屬性就是用來限制第三方Cookie,達到安全預期。

二.SameSite屬性:

前面進行了一下知識鋪墊,下面進入正題,開始分析一下SameSite屬性。

首先從其名稱入手,SameSite由如下兩個單詞合成:

(1).same:翻譯成漢語具有"相同"的意思。

(2).site:翻譯成漢語具有"站點"的意思。

合起來就是"相同站點"的意思,顧名思義,是用來對第三方站點Cookie進行限制

語法結構:

[JavaScript] 純文字檢視 複製程式碼
SameSite=Strict|Lax|None

屬性值解析:

1.Strict:

禁用任何第三方請求Cookie。

確實達到了最安全的程度,但是很多時候會影響使用者體驗。

下面舉個影響使用者體驗的例子:

(1).現在已經登入了螞蟻部落賬號正在瀏覽內容。

(2).百度搜尋特效下載進入螞蟻部落,這時候卻發現,自己處於未登入狀態。

2.Lax:

比Strict要寬鬆很多,下面做一下總結:

(1).對於第三方非同步請求,則禁止第三方Cookie。

(2).對於第三方同步且是GET請求,則不禁止第三方Cookie。

通過<script>、<link>、<img>和<iframe>發起的是非同步請求,如果是第三方請求,那麼禁止Cookie。

通過點選連結或者提交表單(必須是GET)發起的請求是同步請求,即便是第三方請求,也不會禁止Cookie。

3.None:

這個就不用多介紹了,對於第三方請求的Cookie不做任何限制,於是可能被鑽空子。

相關文章