Cookie時Web服務(wù)端發(fā)送給用戶但瀏覽器的一小段數(shù)據(jù),瀏覽器會存儲這些數(shù)據(jù)并且在后續(xù)發(fā)往服務(wù)器的請求中帶上它們。(是一種將數(shù)據(jù)存儲在客戶端的方式)
cookie分類:
第一方Cookie:
First-Party Cookie,是指用戶當前訪問的網(wǎng)站直接植入的Cookie,通常時網(wǎng)站用于正常功能的Cookie,便于使網(wǎng)站記住用戶的偏好設(shè)置。
第三方Cookie
Third-Party Cookie,當用戶訪問一個網(wǎng)站時,如果這個網(wǎng)站加載了其他網(wǎng)站的資源,此時其他網(wǎng)站植入的Cookie就稱為第三方Cookie。
注意:第一方和第三方Cookie是相對的概念,我們是根據(jù)用戶是直接訪問網(wǎng)站還是通過外部網(wǎng)站嵌入訪問來決定該網(wǎng)站是第一方還是第三方。比如我有 a.com, 其中有一個ad.com廣告網(wǎng)站,那么我訪問a.com上的ad.com就是訪問第三方Cookie,如果直接訪問ad.com就是訪問第一方Cookie
聯(lián)想:網(wǎng)站個性化廣告的投放
我在瀏覽第一個網(wǎng)站時關(guān)注了某個物品,當我到另外一個網(wǎng)站,會推送給我那個物品的廣告,就是這兩個網(wǎng)站擁有相同的第三方Cookie。
所有瀏覽器都會接收第一方Cookie,但是瀏覽器隱私策略可能會阻止部分第三方Cookie。
Cookie屬性
-
Domain屬性:
-
指定Cookie在哪些域名中生效,即訪問哪些域名會發(fā)送這個Cookie,也決定了哪些域名的網(wǎng)頁可以通過JavaScript訪問這個Cookie。
-
如果域名前帶 ‘ . ’ 號,表示該Cookie對當前域名及其子域名都有效。如果不帶僅在當前域名有效。
-
如果在服務(wù)端通過Set-Cookie 寫入Cookie時,不指定Domain屬性,Cookie的生效范圍僅限于當前域名,Host-Only Cookie。
-
目前主流瀏覽器都遵循RFC 6265規(guī)范,在 Set-Cookie 或 JavaScript 中寫入Cookie時只要加入了Domain屬性,即使沒有點號 “ . ”前綴,它也不是 Host-Only Cookie。
-
注意:Cookie的域名隔離不受端口的限制,須評估使用該域名不同端口的web應(yīng)用的安全性
-
-
Path屬性:
-
用于指定Cookie生效路徑,只有訪問這個路徑時,瀏覽器才會發(fā)送這個Cookie。
-
如果不設(shè)置Path,默認值就是當前頁面所在路徑。
-
不能依賴Path來做安全隔離,因為在瀏覽器中一個路徑頁面可以使用ifram嵌入另一個路徑頁面,而這兩個頁面為同源,他們之間DOMD可以互相訪問,所以一個頁面可以讀取另一個頁面的Cookie
-
-
Expries屬性:
-
服務(wù)端可以通過Expires屬性來設(shè)置Cookie的有效期,瀏覽器會在這個Cookie到期后自動將其刪除。
-
沒有指定Expries屬性的Cookie叫做“臨時Cookie”,在關(guān)閉瀏覽器后將自動刪除。
-
設(shè)置了有效期的Cookie,瀏覽器并不能保證他在有效期內(nèi)不被刪除,因為瀏覽器對Cookie的存儲存在一個上限,超過這個上線,會刪除舊的Cookie。
-
-
HttpOnly屬性:
-
說明Cookie只能用于HTTP/HTTPS傳輸,客戶端JavaScript無法讀取它。
-
-
Secure屬性:
-
給Cookie設(shè)置該屬性后,Cookie指揮在HTTPS親求種被發(fā)送給服務(wù)器,非加密HTTP請求是不會發(fā)送該Cookie的。
-
-
SameSite屬性:
-
SameSite是一個新的安全屬性,服務(wù)端在 Set-Cookie響應(yīng)頭中通過SameSite屬性指定是否可以在跨站請求中發(fā)送該Cookie,即它能不能作為第三方Cookie。
-
None:
-
不做限制,任何場景下都會發(fā)送Cookie。但是當SameSite被設(shè)置為None時,要求Cookie帶上Secure屬性,即只能在HTTPS協(xié)議中發(fā)送。
-
-
LAX:
-
在普通的跨站請求中都不發(fā)送Cookie,但是導(dǎo)航到其他網(wǎng)站時(點擊連接)會發(fā)送Cookie。
-
在跨站點提交表單的場景中,只有GET方法提交的表單會帶Cookie。
-
-
Strict:
-
完全禁止在跨站請求中發(fā)送Cookie,即使點擊站外鏈接也不會發(fā)送Cookie,只有當請求的站點與瀏覽器地址欄中URL中域名屬于同一個站點時才會發(fā)送Cookie。
-
由于會影響到用戶體驗,使用非常少。
-
-
-
SameParty屬性:
-
即允許企業(yè)將多個網(wǎng)站定義成一個可信站點集合,稱為First-Party Sets。當一個網(wǎng)站請求另一個網(wǎng)站資源時,瀏覽器會檢測這兩個網(wǎng)站是否同處一個First-Party Sets,如果是帶有SameParty 屬性的第三方Cookie也會被帶上。
-
-
Cookie前綴:
-
在存在子域名的網(wǎng)站中,每個站點可以通過設(shè)置Cookie的Domain屬性,寫入一個讓所有子域名都可見的Cookie。這將帶來一定的混亂,每個站點都無法確定一個Cookie是不是自己寫入的。
-
_Host-
-
服務(wù)端通過 Set-Cookie 頭設(shè)置 Cookie,或者前端腳本通過 document.cookie 屬性設(shè)置Cookie時,只有滿足以下四個條件瀏覽器才接受:
-
帶有Secure屬性
-
不包含Domain屬性
-
Patj屬性為“ / ”
-
當前為HTTPS鏈接
-
-
-
_Secure-
-
只有帶Secure屬性且當前連接為HTTPS瀏覽器才會接受,是一個約束更少的弱化版本。
-
-
-
保密性和完整性
在Web服務(wù)器角度來看,Cookie是對用戶完全公開的,應(yīng)該把Cookie當作不可信的外部輸入數(shù)據(jù),不能用Cookie數(shù)據(jù)來做關(guān)鍵的判斷。
會話安全
在Web應(yīng)用中,會話的本質(zhì)是標識不同的訪問者,記錄他們的狀態(tài),攻擊者如果竊取或者偽造了一個會話標識就相當于盜取一個賬號身份。
會話管理
會話ID最基本的要求是隨機性。
過期和失效
由于Cookie中有效時期訪問者可以任意修改Expires屬性,所以超時機制應(yīng)該在服務(wù)端實現(xiàn)的。
綁定客戶端
如果將繪畫與客戶端綁定會更安全,即使SessionID被竊取也無法在新的設(shè)備中登錄目標網(wǎng)站。(QQ異地登錄?)
另一個更安全的做法是在登錄時將會話與訪問者的IP地址綁定,但是會影響用戶體驗。文章來源:http://www.zghlxwxcb.cn/news/detail-774595.html
安全傳輸
現(xiàn)代Web應(yīng)該基本上都是將SessionID寫入到Cookie中,所以設(shè)置相應(yīng)的Cookie安全屬性非常重要,大多數(shù)情況下,建議開啟HttpOnly和Secure屬性。文章來源地址http://www.zghlxwxcb.cn/news/detail-774595.html
到了這里,關(guān)于Cookie和會話安全的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!