Cookie 的 SameSite 屬性小結(jié)

一、CSRF 攻擊是什么?
Cookie 往往用來(lái)存儲(chǔ)用戶的身份信息,惡意網(wǎng)站可以設(shè)法偽造帶有正確 Cookie 的 HTTP 請(qǐng)求,這就是 CSRF 攻擊。
舉例來(lái)說(shuō),用戶登陸了銀行網(wǎng)站your-bank.com,銀行服務(wù)器發(fā)來(lái)了一個(gè) Cookie。
Set-Cookie:id=a3fWa;
用戶后來(lái)又訪問(wèn)了惡意網(wǎng)站malicious.com,上面有一個(gè)表單。
<form action="your-bank.com/transfer" method="POST"> ... </form>
用戶一旦被誘騙發(fā)送這個(gè)表單,銀行網(wǎng)站就會(huì)收到帶有正確 Cookie 的請(qǐng)求。為了防止這種攻擊,表單一般都帶有一個(gè)隨機(jī) token,告訴服務(wù)器這是真實(shí)請(qǐng)求。
<form action="your-bank.com/transfer" method="POST"> <input type="hidden" name="token" value="dad3weg34"> ... </form>
這種第三方網(wǎng)站引導(dǎo)發(fā)出的 Cookie,就稱為第三方 Cookie。它除了用于 CSRF 攻擊,還可以用于用戶追蹤。
比如,F(xiàn)acebook 在第三方網(wǎng)站插入一張看不見(jiàn)的圖片。
<img src="facebook.com" style="visibility:hidden;">
瀏覽器加載上面代碼時(shí),就會(huì)向 Facebook 發(fā)出帶有 Cookie 的請(qǐng)求,從而 Facebook 就會(huì)知道你是誰(shuí),訪問(wèn)了什么網(wǎng)站。
二、SameSite 屬性
Cookie 的SameSite屬性用來(lái)限制第三方 Cookie,從而減少安全風(fēng)險(xiǎn)。
它可以設(shè)置三個(gè)值。
- Strict
- Lax
- None
2.1 Strict
Strict最為嚴(yán)格,完全禁止第三方 Cookie,跨站點(diǎn)時(shí),任何情況下都不會(huì)發(fā)送 Cookie。換言之,只有當(dāng)前網(wǎng)頁(yè)的 URL 與請(qǐng)求目標(biāo)一致,才會(huì)帶上 Cookie。
Set-Cookie: CookieName=CookieValue; SameSite=Strict;
這個(gè)規(guī)則過(guò)于嚴(yán)格,可能造成非常不好的用戶體驗(yàn)。比如,當(dāng)前網(wǎng)頁(yè)有一個(gè) GitHub 鏈接,用戶點(diǎn)擊跳轉(zhuǎn)就不會(huì)帶有 GitHub 的 Cookie,跳轉(zhuǎn)過(guò)去總是未登陸狀態(tài)。
2.2 Lax
Lax規(guī)則稍稍放寬,大多數(shù)情況也是不發(fā)送第三方 Cookie,但是導(dǎo)航到目標(biāo)網(wǎng)址的 Get 請(qǐng)求除外。
Set-Cookie: CookieName=CookieValue; SameSite=Lax;
導(dǎo)航到目標(biāo)網(wǎng)址的 GET 請(qǐng)求,只包括三種情況:鏈接,預(yù)加載請(qǐng)求,GET 表單。詳見(jiàn)下表。
| 請(qǐng)求類型 | 示例 | 正常情況 | Lax |
|---|---|---|---|
| 鏈接 | <a href="..." rel="external nofollow" rel="external nofollow" ></a> | 發(fā)送 Cookie | 發(fā)送 Cookie |
| 預(yù)加載 | <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ā)送 |
設(shè)置了Strict或Lax以后,基本就杜絕了 CSRF 攻擊。當(dāng)然,前提是用戶瀏覽器支持 SameSite 屬性。
2.3 None
Chrome 計(jì)劃將Lax變?yōu)槟J(rèn)設(shè)置。這時(shí),網(wǎng)站可以選擇顯式關(guān)閉SameSite屬性,將其設(shè)為None。不過(guò),前提是必須同時(shí)設(shè)置Secure屬性(Cookie 只能通過(guò) HTTPS 協(xié)議發(fā)送),否則無(wú)效。
下面的設(shè)置無(wú)效。
Set-Cookie: widget_session=abc123; SameSite=None
下面的設(shè)置有效。
Set-Cookie: widget_session=abc123; SameSite=None; Secure
三、參考鏈接
- Using the Same-Site Cookie Attribute to Prevent CSRF Attacks
- SameSite cookies explained
- Tough Cookies, Scott Helme
- Cross-Site Request Forgery is dead!, Scott Helme
到此這篇關(guān)于Cookie 的 SameSite 屬性的文章就介紹到這了,更多相關(guān)Cookie SameSite 屬性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
git與svn的區(qū)別及優(yōu)缺點(diǎn)說(shuō)明
Git和SVN都是版本控制系統(tǒng),用于代碼管理,SVN是集中式的,需要聯(lián)網(wǎng)并且中央服務(wù)器存在單點(diǎn)故障的風(fēng)險(xiǎn),Git是分布式的,每個(gè)終端都是一個(gè)完整的倉(cāng)庫(kù),不依賴中央服務(wù)器,提高了工作的靈活性和安全性,SVN易于管理權(quán)限,但必須聯(lián)網(wǎng)工作且更新提交可能面臨沖突2024-10-10
Git報(bào)錯(cuò)error:pathspec‘XXX‘did not match any&nbs
這篇文章主要介紹了Git報(bào)錯(cuò)error:pathspec‘XXX‘did not match any file(s) known to git問(wèn)題及解決過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
gVim, gVim Easy, gVim Read-only 的簡(jiǎn)單區(qū)別
今天打算好好學(xué)習(xí)一下python,買了一本書(shū)看了介紹無(wú)語(yǔ)了,gVim, gVim Diff, gVim Easy, gVim Read-only 的簡(jiǎn)單區(qū)別,需要的朋友可以參考下2016-01-01
使用MASA?Blazor開(kāi)發(fā)查詢表格頁(yè)
MASA?Blazor?是一個(gè)基于?Material?Design?設(shè)計(jì)語(yǔ)言的?Blazor?組件庫(kù),dotNET開(kāi)發(fā)者只需或者甚至不需要懂得?javascript?就能開(kāi)發(fā)一個(gè)企業(yè)級(jí)中后臺(tái)系統(tǒng),這篇文章主要介紹了使用MASA?Blazor開(kāi)發(fā)一個(gè)標(biāo)準(zhǔn)的查詢表格頁(yè),需要的朋友可以參考下2022-04-04
解決idea打開(kāi)窗口/tab過(guò)多導(dǎo)致隱藏的問(wèn)題
這篇文章主要介紹了解決idea打開(kāi)窗口/tab過(guò)多導(dǎo)致隱藏的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
301重定向代碼合集(iis,asp,php,asp.net,apache)
腳本之家將SEO工作中所需要的301轉(zhuǎn)向代碼進(jìn)行了整理,收藏并分享,以備查閱。2011-02-02
Windows系統(tǒng)下安裝GIt及GIT基本認(rèn)識(shí)和配置
這篇文章主要介紹了Windows系統(tǒng)下安裝GIt及GIT基本認(rèn)識(shí)和配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
nacos?2.1.0集群多節(jié)點(diǎn)部署最新詳細(xì)教程
這篇文章主要介紹了全網(wǎng)最新的nacos?2.1.0集群多節(jié)點(diǎn)部署教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07

