跨域Cookie的讀取
cookie的幾個(gè)屬性
1 httpOnly:true 表示禁止客戶(hù)端讀cookie,即只能在服務(wù)端讀取它
2 SameSite:用來(lái)限制第三方 Cookie,從而減少安全風(fēng)險(xiǎn)。
- 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;
- Lax規(guī)則稍稍放寬,大多數(shù)情況也是不發(fā)送第三方 Cookie,但是導(dǎo)航到目標(biāo)網(wǎng)址的 Get 請(qǐng)求除外。
導(dǎo)航到目標(biāo)網(wǎng)址的 GET 請(qǐng)求,只包括三種情況:鏈接,預(yù)加載請(qǐng)求,GET 表單。詳見(jiàn)下表。

Set-Cookie: CookieName=CookieValue; SameSite=Lax;
- 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ú)效。
Set-Cookie: widget_session=abc123; SameSite=None; Secure
需要明確的
- 跨域之后,不能讀寫(xiě)cookie,例如a網(wǎng)站的cookie,b網(wǎng)站不能讀到
- samesite:none可以讓c網(wǎng)站的cookie,由不能的調(diào)用方共享修改,例如a網(wǎng)站操作c網(wǎng)站,c網(wǎng)站寫(xiě)自己的cookie,而b網(wǎng)站也操作c網(wǎng)站,這時(shí)c網(wǎng)站的cookie里是可以包含a網(wǎng)站的操作內(nèi)容的
在keycloak中的應(yīng)用
keycloak中的cookie,它的會(huì)話(huà)狀態(tài)使用了SameSite,從而在由一個(gè)網(wǎng)站到別一個(gè)網(wǎng)站時(shí),如果你已經(jīng)登錄,那這些登錄信息會(huì)帶到另一個(gè)網(wǎng)站去,這是由SameSite特性決定的,和開(kāi)發(fā)的程序無(wú)關(guān),我們之間使用kc的session通訊

Secure屬性說(shuō)明
Secure屬性是說(shuō)如果一個(gè)cookie被設(shè)置了Secure=true,那么這個(gè)cookie只能用https協(xié)議發(fā)送給服務(wù)器,用http協(xié)議是不發(fā)送的。換句話(huà)說(shuō),cookie是在https的情況下創(chuàng)建的,
而且他的Secure=true,那么之后你一直用https訪(fǎng)問(wèn)其他的頁(yè)面(比如登錄之后點(diǎn)擊其他子頁(yè)面),cookie會(huì)被發(fā)送到服務(wù)器,你無(wú)需重新登錄就可以跳轉(zhuǎn)到其他頁(yè)面。但是如果這
是你把url改成http協(xié)議訪(fǎng)問(wèn)其他頁(yè)面,你就需要重新登錄了,因?yàn)檫@個(gè)cookie不能在http協(xié)議中發(fā)送,事實(shí)上,對(duì)于samesite屬性為None時(shí),因?yàn)橹挥衧ecure為true它才合法,
所以這samesite=None也只能應(yīng)用在https環(huán)境里。
https已經(jīng)很安全,所以在它里面可以用 Samesite=None;Secure=true
瀏覽器對(duì)samesite和secure的默認(rèn)值設(shè)置不同
- 谷歌

- 火狐

火狐這塊更加寬松,跨站的cookie,http協(xié)議方式也是可以讀到的,谷歌是不可以的。
浙公網(wǎng)安備 33010602011771號(hào)