Cookie 的 SameSite 屬性小結(jié)
一、CSRF 攻擊是什么?
Cookie 往往用來存儲用戶的身份信息,惡意網(wǎng)站可以設(shè)法偽造帶有正確 Cookie 的 HTTP 請求,這就是 CSRF 攻擊。
舉例來說,用戶登陸了銀行網(wǎng)站your-bank.com
,銀行服務(wù)器發(fā)來了一個 Cookie。
Set-Cookie:id=a3fWa;
用戶后來又訪問了惡意網(wǎng)站malicious.com
,上面有一個表單。
<form action="your-bank.com/transfer" method="POST"> ... </form>
用戶一旦被誘騙發(fā)送這個表單,銀行網(wǎng)站就會收到帶有正確 Cookie 的請求。為了防止這種攻擊,表單一般都帶有一個隨機 token,告訴服務(wù)器這是真實請求。
<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)站插入一張看不見的圖片。
<img src="facebook.com" style="visibility:hidden;">
瀏覽器加載上面代碼時,就會向 Facebook 發(fā)出帶有 Cookie 的請求,從而 Facebook 就會知道你是誰,訪問了什么網(wǎng)站。
二、SameSite 屬性
Cookie 的SameSite
屬性用來限制第三方 Cookie,從而減少安全風險。
它可以設(shè)置三個值。
- Strict
- Lax
- None
2.1 Strict
Strict
最為嚴格,完全禁止第三方 Cookie,跨站點時,任何情況下都不會發(fā)送 Cookie。換言之,只有當前網(wǎng)頁的 URL 與請求目標一致,才會帶上 Cookie。
Set-Cookie: CookieName=CookieValue; SameSite=Strict;
這個規(guī)則過于嚴格,可能造成非常不好的用戶體驗。比如,當前網(wǎng)頁有一個 GitHub 鏈接,用戶點擊跳轉(zhuǎn)就不會帶有 GitHub 的 Cookie,跳轉(zhuǎn)過去總是未登陸狀態(tài)。
2.2 Lax
Lax
規(guī)則稍稍放寬,大多數(shù)情況也是不發(fā)送第三方 Cookie,但是導(dǎo)航到目標網(wǎng)址的 Get 請求除外。
Set-Cookie: CookieName=CookieValue; SameSite=Lax;
導(dǎo)航到目標網(wǎng)址的 GET 請求,只包括三種情況:鏈接,預(yù)加載請求,GET 表單。詳見下表。
請求類型 | 示例 | 正常情況 | 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 攻擊。當然,前提是用戶瀏覽器支持 SameSite 屬性。
2.3 None
Chrome 計劃將Lax
變?yōu)槟J設(shè)置。這時,網(wǎng)站可以選擇顯式關(guān)閉SameSite
屬性,將其設(shè)為None
。不過,前提是必須同時設(shè)置Secure
屬性(Cookie 只能通過 HTTPS 協(xié)議發(fā)送),否則無效。
下面的設(shè)置無效。
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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vscode?debug設(shè)置參數(shù)與環(huán)境變量圖文詳解
這篇文章主要給大家介紹了關(guān)于vscode?debug設(shè)置參數(shù)與環(huán)境變量的相關(guān)資料,文中通過圖文以及代碼示例介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09十分鐘內(nèi)學(xué)會 避免用戶刷新導(dǎo)致重復(fù)POST提交
在Web應(yīng)用中,采用POST提交信息是非常常見的,然而如果目標頁面打開得太慢,用戶就可能會刷新頁面,這時候之前已經(jīng)提交過的信息就會被重復(fù)提交。2009-08-08linux系統(tǒng)使用vscode進行qt開發(fā)的過程分享
最近在Linux上搞Qt,搞的一頭霧水,小編把整個過程記錄下,分享需要的朋友,如果大家對linux系統(tǒng)使用vscode進行qt開發(fā)相關(guān)知識感興趣的朋友跟隨小編一起看看吧2021-12-12MAC系統(tǒng)IDEA顏值插件MaterialThemeUI
俗話說,工欲善其事必先利其器。工具的顏值也很重要,好的主題讓人賞心悅目,有碼代碼的欲望。今天推薦一個IDEA顏值類插件:Material Theme UI2021-09-09Azkaban報錯-azkaban.executor.ExecutorManagerException: No acti
這篇文章主要介紹了Azkaban報錯-azkaban.executor.ExecutorManagerException: No active executors found,本文給大家介紹的非常詳細,需要的朋友可以參考下2020-05-05