【科普】關于Cookie的一點知識

【科普】關于Cookie的一點知識

  • 1. Cookie的傳輸方式
  • 2. 不設置Domain時的默認邏輯
  • 3. SameSite設置為None的風險
  • 4. 通過IP訪問時如何設置Cookie

1. Cookie的傳輸方式

Cookie是通過HTTP(超文本傳輸協議)和HTTPS(安全超文本傳輸協議)頭部在服務器和客戶端之間傳輸的。當服務器想要在客戶端(通常是網頁瀏覽器)上存儲信息時,它會在HTTP響應頭中包含一個Set-Cookie頭部,這個頭部包含了cookie的名稱、值以及其他可選屬性(如ExpiresMax-AgeDomainPathSecureHttpOnlySameSite等)。然后,瀏覽器會存儲這些信息,并在之后對該服務器的每次請求中通過HTTP請求頭中的Cookie頭部將其回傳給服務器。

這是一個服務器響應示例,設置了一個cookie:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT

而這是之后客戶端請求服務器時,瀏覽器自動添加的請求頭示例,包含之前設置的cookie:

GET /index.html HTTP/1.1
Host: www.example.com
Cookie: name=value

如果網站通過HTTPS運行,使用Secure屬性的cookie將通過加密的方式傳輸,增加了數據傳輸過程中的安全性。此外,HttpOnly屬性可以用來限制cookie僅通過HTTP(S)請求被傳輸,而不能通過客戶端腳本訪問,這有助于減少跨站腳本攻擊(XSS)的風險。

2. 不設置Domain時的默認邏輯

當設置Cookie時,如果沒有為Domain屬性指定值,默認行為是將Cookie與設置它的服務器的完全限定域名(FQDN)關聯。這意味著,如果沒有明確設置Domain屬性,Cookie僅會被發送到原始服務器而不會被發送到其他任何子域。

例如,如果您的服務器位于example.com,并且在設置Cookie時沒有指定Domain屬性:

Set-Cookie: name=value; Path=/

那么這個Cookie將只對來自example.com的請求可見。它不會對任何子域(如sub.example.com)可見。

然而,如果您設置了Domain屬性為.example.com(注意域名前的點):

Set-Cookie: name=value; Domain=.example.com; Path=/

這個Cookie則對example.com及其所有子域(如sub.example.comanother.sub.example.com等)可見。這種方式可以讓Cookie跨多個子域共享。

需要注意的是,出于安全考慮,瀏覽器通常不允許將Cookie設置為頂級域名之外的域。例如,如果您嘗試從example.com設置一個屬于anotherdomain.com的Cookie,這種設置將會被忽略。此外,一些現代瀏覽器對第三方Cookie(來自不同于當前網頁域的Cookie)有更嚴格的限制,這也需要在設計Cookie策略時考慮。

3. SameSite設置為None的風險

將Cookie的SameSite屬性設置為None以允許跨站點請求發送Cookie確實帶來了一些安全風險。SameSite屬性是用來防止跨站點請求偽造(CSRF)攻擊的,它允許服務器指定某個Cookie不應該隨著來自第三方網站的請求被發送。當SameSite設置為None時,Cookie將在所有的請求中被發送,包括跨站點請求,這就增加了下列風險:

  1. 跨站點請求偽造(CSRF):如果Cookie不受到適當的保護(例如,沒有使用CSRF令牌),那么攻擊者可能會利用用戶的登錄態發起惡意請求。例如,如果用戶登錄了銀行網站,然后訪問了一個惡意網站,那么這個惡意網站可以在不知情的情況下發起跨站點請求,如嘗試轉賬操作。

  2. 跨站腳本攻擊(XSS):雖然SameSite=None本身不直接導致XSS攻擊,但如果配合Secure屬性未被設置(因為SameSite=None需要與Secure一起使用),在非HTTPS環境下,Cookie更容易被攔截。如果攻擊者能夠注入惡意腳本到網頁上,他們可能利用這個漏洞竊取用戶的Cookie。

  3. 隱私泄露:由于Cookie將在所有的請求中被發送,用戶的一些隱私信息可能會無意中泄露給第三方網站。這可能包括跟蹤用戶行為的Cookie,從而允許第三方創建用戶的詳細行為輪廓。

為了緩解這些風險,網站開發者應該:

  • 只在確實需要跨站點Cookie時設置SameSite=None,并始終與Secure屬性一起使用,確保Cookie僅通過安全的HTTPS連接被發送。
  • 實施其他安全措施,比如使用CSRF令牌和XSS過濾,以進一步保護網站免受攻擊。
  • 審慎考慮哪些信息存儲在Cookie中,避免存儲敏感信息。

4. 通過IP訪問時如何設置Cookie

通過IP地址訪問網站時設置Cookie的方式與通過域名訪問時相同。在HTTP響應頭中使用Set-Cookie字段來設置Cookie。以下是一個設置Cookie的HTTP響應示例:

HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: sessionId=abc123; Path=/; Expires=Wed, 09 Jun 2021 10:18:14 GMT

在客戶端,無論是通過域名還是IP地址訪問,瀏覽器都會處理并存儲服務器發送的Cookie,并在隨后的請求中返回給服務器。

但是,需要注意幾個重要的限制和最佳實踐:

  1. 安全性:如果您設置了Secure屬性,意味著Cookie只能通過HTTPS協議發送。這意味著您的服務器必須配置SSL/TLS,即使是通過IP地址訪問。

  2. 作用域:通常,Cookie會與特定的域名關聯。如果您通過IP地址設置Cookie,那么Cookie的Domain屬性可能無法使用或者其行為可能與期望不同。在這種情況下,Cookie將默認與完全匹配的IP地址關聯。

  3. 跨域請求:如果您的網站使用了跨域資源共享(CORS)策略,并且您希望通過IP地址訪問時也能發送Cookie,那么您需要確保CORS策略中包含了相應的IP地址,并且請求中包含credentials標志。

  4. SameSite屬性:如之前討論的,SameSite屬性可以控制Cookie的跨站點請求行為。SameSite=None; Secure將允許Cookie在跨站點請求中發送,但這通常用于具有明確域名的網站。通過IP地址訪問時,依然可以設置這個屬性,但實際上跨站點的概念可能不適用于純IP訪問的情況。

在實際部署時,出于安全和兼容性的考慮,推薦使用域名而不是裸IP地址來服務網站,并通過HTTPS提供服務。如果您必須通過IP地址設置和管理Cookie,那么您可能需要格外注意安全配置和測試,以確保一切按預期工作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18032.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18032.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18032.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NSSCTF中的pop、babyupload、cve版本簽到、奇妙的MD5、easy_html

目錄 [SWPUCTF 2021 新生賽]pop [NISACTF 2022]babyupload ?編輯[GKCTF 2020]cve版簽到 [SWP5UCTF 2022 新生賽]奇妙的MD5 [HNCTF 2022 Week1]easy_html 今日總結&#xff1a; [SWPUCTF 2021 新生賽]pop 1.代碼審計 <?phperror_reporting(0); show_source("…

裝機必備——360壓縮安裝教程

裝機必備——360壓縮安裝教程 軟件下載 軟件名稱&#xff1a;360壓縮 軟件語言&#xff1a;簡體中文 軟件大小&#xff1a;3.38M 系統要求&#xff1a;Windows7或更高&#xff0c; 32/64位操作系統 硬件要求&#xff1a;CPU2GHz &#xff0c;RAM4G或更高 下載通道①迅雷云盤丨…

Linux性能優化-網絡篇

文章目錄 前言一、網絡性能指標二、網絡基準測試如何評估系統的網絡性能各協議層的性能測試轉發性能TCP/UPD性能HTTP性能應用負載性能 三、網絡指標的獲取查詢帶寬網絡吞吐和PPS網絡連通 總結 前言 如何評價一套新環境內主機和應用的網絡性能&#xff0c;有哪些指標需要注意&a…

跳躍游戲(2)

問題描述 給你一個非負整數數組 nums &#xff0c;你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個下標&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 輸入&#xff1…

DINO結構中的exponential moving average (ema)和stop-gradient (sg)

DINO思路介紹 在 DINO 中&#xff0c;教師和學生網絡分別預測一個一維的嵌入。為了訓練學生模型&#xff0c;我們需要選取一個損失函數&#xff0c;不斷地讓學生的輸出向教師的輸出靠近。softmax 結合交叉熵損失函數是一種常用的做法&#xff0c;來讓學生模型的輸出與教師模型的…

Flutter 中的 AnimatedDefaultTextStyle 小部件:全面指南

Flutter 中的 AnimatedDefaultTextStyle 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;AnimatedDefaultTextStyle 是一個用于動畫化默認文本樣式的組件&#xff0c;它可以在文本顯示期間平滑地過渡文本樣式&#xff0c;如字體大小、顏色和字體族。這在實現復雜的文本…

pytorch應該安裝哪個nvcc -V 還是 nvidia-smi 對比的cuda?

當使用nvidia-smi時會顯示 cuda driver版本&#xff0c;如下&#xff1a; NVIDIA-SMI 510.47.03 Driver Version: 510.47.03 CUDA Version: 11.6 當使用 nvcc -V 時會顯示 cuda runtime version&#xff0c;如下&#xff1a; nvcc: NVIDIA (R) Cuda compiler driver …

Docker安裝Oracle11g數據庫

操作系統&#xff1a;centOS9使用此方法檢查是否安裝Docker&#xff1a;docker --help&#xff0c;如果有幫助文件則證明安裝成功使用此語句檢查Docker是否正在運行&#xff1a;docker images&#xff0c;實際上是查看本地鏡像如果發現未運行則開啟Docker&#xff1a;systemctl…

普華永道調查:“擁抱AI”的行業正呈現出生產率激增景象

全球知名四大會計師事務所之一的普華永道最新報告顯示&#xff0c;一些最有可能將人工智能技術融入業務的企業&#xff0c;其生產率增長速度幾乎是其他行業的5倍&#xff0c;這有望推動整體經濟。周二&#xff08;5月21日&#xff09;發布的報告稱&#xff0c;2018年至2022年間…

MyCat2之安裝與配置文件介紹

安裝 1.新建文件夾tools mkdir tools&#xff0c;并進入tools 2.下載MaCat wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar 3.解壓zip u…

怎樣打造一份個性化畫冊呢?我來教你

在這個數字化的時代&#xff0c;傳統的照片已經不能滿足我們對個性化回憶的需求。個性化畫冊&#xff0c;不僅能夠承載我們的記憶&#xff0c;還能展現自我風格。今天&#xff0c;就讓我來教你如何打造一份屬于自己的個性化畫冊。 1.要制作電子雜志,首先需要選擇一款適合自己的…

kafka3.6.1版本學習

kafka目錄結構 bin linux系統下可執行腳本文件 bin/windows windows系統下可執行腳本文件 config 配置文件 libs 依賴類庫 licenses 許可信息 site-docs 文檔 logs 服務日志 啟動ZooKeeper 進入Kafka解壓縮文件夾的config目錄&#xff0c;修改zookeeper.properties配置文件 #t…

【吊打面試官系列】Java高并發篇 - Java 死鎖以及如何避免?

大家好&#xff0c;我是鋒哥。今天分享關于 【Java 死鎖以及如何避免&#xff1f;】面試題&#xff0c;希望對大家有幫助&#xff1b; Java 死鎖以及如何避免&#xff1f; Java 中的死鎖是一種編程情況&#xff0c;其中兩個或多個線程被永久阻塞&#xff0c;Java 死鎖情況出現至…

【每日刷題】Day50

【每日刷題】Day50 &#x1f955;個人主頁&#xff1a;開敲&#x1f349; &#x1f525;所屬專欄&#xff1a;每日刷題&#x1f34d; &#x1f33c;文章目錄&#x1f33c; 1. 654. 最大二叉樹 - 力扣&#xff08;LeetCode&#xff09; 2. 119. 楊輝三角 II - 力扣&#xff08…

「動態規劃」粉刷房子

力扣原題鏈接&#xff0c;點擊跳轉。 假設有n個房子&#xff0c;每個房子可以粉刷成紅色、藍色或者綠色。相鄰2個房子不能刷同一種顏色。下標為i的房子粉刷成下標為j的顏色的價格是costs[i][j]。至少需要花多少錢&#xff1f; 我們用動態規劃的思想來解決這個問題。首先定義狀…

微信行駛證識別

1.官網文檔 行駛證識別 | 微信開放文檔 2.免費次數購買微信OCR識別 | 微信服務市場 需要購買&#xff0c;否則會報錯{"errcode":101003,"errmsg":"not enough market quota hint: [] rid: "} 錯誤總結 {\"errcode\":41005,\"…

MATLAB system identification系統辨識app的使用

系統辨識 前言系統辨識第一步 選取時域數據到app第二步 分割數據第三步 設置傳遞函數的參數第四步 Estimate第五步 結束 前言 接上節&#xff1a;simulink-仿真以及PID參數整定 系統模型的辨識工作&#xff0c;在控制領域&#xff0c;一般用于開發控制器的先手工作。一般而言…

【數據結構與算法 | 基礎篇】棧:中綴表達式轉變為后綴表達式

1. 前言 假設我們已經知道中綴表達式和后綴表達式的概念. 我們可以用符號棧來實現中綴表達式向后綴表達式的轉變. 2. 符號棧實現中綴表達式轉變為后綴表達式 (1). 思路 我們設計了可變字符串與符號棧. 如果傳入的字符串的字符是數字字符&#xff0c;則直接將該字符append到…

Python | 十、調試(pdb庫)

pdb 是 Python 的官方標準庫之一&#xff0c;提供了一個交互式源代碼調試器。它可以讓開發者在程序執行過程中暫停&#xff0c;檢查代碼狀態&#xff08;如變量的值&#xff09;&#xff0c;單步執行代碼&#xff0c;以及運行到某個特定位置等。這些功能使得開發者能夠理解代碼…

調整圖片和表格尺寸的命令:resizebox

\resizebox 是 LaTeX 中的一個命令&#xff0c;用于調整插入的內容&#xff08;如圖像、表格、文本等&#xff09;的大小。它的語法如下&#xff1a; \resizebox{<width>}{<height>}{<content>}其中&#xff1a; <width> 和 <height> 分別表示…