跨站請求是什么?

介紹

跨站請求(Cross-Site Request)通常是指瀏覽器在訪問一個網站時,向另一個域名的網站發送請求的行為。這個概念在 Web 安全中非常重要,尤其是在涉及到“跨站請求偽造(CSRF)”和“跨域資源共享(CORS)”時。

? 原理:

  1. 用戶登錄了網站 A(比如網銀),獲得了身份 Cookie;

  2. 惡意網站 B 引導用戶訪問一個看不見的表單或圖片鏈接;

  3. 瀏覽器默認會自動攜帶 Cookie 發起請求;

  4. 網站 A 接收到請求,并以為是用戶主動發起的操作;

  5. 被攻擊了!

<img src="https://bank.com/transfer?to=badguy&amount=1000" />

CORS 設置(針對跨域資源共享)

? 服務器通過 Access-Control-Allow-Origin 控制哪些域可以訪問資源

? 默認禁止 JavaScript 跨域請求敏感信息

CSRF 防御:

? 使用 CSRF Token(后端生成一個隱藏字段或 header,必須攜帶)

? 使用 SameSite 屬性限制 Cookie 跨站發送

? 檢查 Referer 來源

? POST 請求驗證身份

同源限制

?A 網站不能直接訪問 B 網站的 Cookie。

這是瀏覽器的**同源策略(Same-Origin Policy)**保護的。

? 什么是 Cookie 同源限制?

同源 = 協議 + 域名 + 端口 都相同

瀏覽器規定:

一個網站(origin)設置的 Cookie,只能被這個網站自己訪問。

🔒 比如:

網站可訪問的 Cookie 域
https://a.com只能訪問屬于 a.com 的 Cookie
https://b.com不能訪問 a.com 的 Cookie

所以,即使你設置了“允許所有 Cookie”,瀏覽器還是會自動隔離不同網站之間的 Cookie

🍪 那些“Allow all cookies”是啥意思?

這些是用戶給瀏覽器設置的權限,意思是:

? 是否允許 第三方 Cookie(Third-Party Cookies)

? 比如:你在 a.com 上訪問,但頁面里加載了 b.com 的 iframe / 圖片 / script,這些操作是否可以讓瀏覽器存取 b.com 的 Cookie。

<!-- 你在訪問 a.com -->
<iframe src="https://b.com/login"></iframe>

如果瀏覽器允許第三方 Cookie,b.com 的頁面可以設置 Cookie,這個 Cookie 是屬于 b.com 的。

?? 你在 a.com 的 JS 代碼還是訪問不到?b.com 的 Cookie!

強限制SameSite

🔒 SameSite 是啥?

SameSite 是瀏覽器用來限制 Cookie 在跨站請求中是否可以攜帶的一個 Cookie 屬性。

是 Cookie 本身帶的設置,告訴瀏覽器:“這個 Cookie 什么時候可以被發送?”

📋 SameSite 的三種取值:

含義跨站請求是否帶 Cookie?場景
Strict嚴格模式?完全禁止安全性最高,比如網銀登錄
Lax寬松模式?允許 GET 導航(如點擊鏈接)登錄頁面跳轉
None無限制?允許所有跨站請求,但需要加 Secure(HTTPS)跨站 API、第三方登錄等

假設你在 a.com 登錄后有個 Cookie:sessionid=abc123,設置了:

# Django/FastAPI 設置 Cookie 的時候加:
response.set_cookie(key="sessionid",value="abc123",samesite="strict",secure=True,
)

如果你后來從 b.com 發起一個請求到 a.com:

// 你在 b.com 上寫了
fetch('https://a.com/api/userinfo', { credentials: 'include' })

🔒 瀏覽器不會攜帶 sessionid=abc123,因為你設置了 SameSite=Strict。

? 原因:

? 防止 CSRF 攻擊(跨站請求偽造)

? 增加賬戶安全性

? 默認更“保守”,開發者自己決定放開(改為 Lax 或 None)

?注意:

? 如果你的網站需要 跨站點請求+登錄狀態,比如前端 a.com、后端 api.a.com,就不能用 Strict,你要用:

SameSite=None; Secure

如果后端不使用 Cookie,而是使用 Authorization Header(比如 JWT)做身份驗證,那 SameSite=Strict 對你來說根本不重要,完全沒影響。

🔐 傳統 Cookie 登錄(狀態保存在服務器):

? 登錄成功后后端設置 cookie:

Set-Cookie: sessionid=abc123; SameSite=Strict

? 每次請求,瀏覽器自動帶上 cookie:

Cookie: sessionid=abc123

這時候 SameSite=Strict 會阻止瀏覽器在跨站請求中攜帶這個 Cookie,比如別人惡意發起跨站 POST 請求,防止 CSRF

項目類型使用 Cookie 嗎?是否需要關注 SameSite?
傳統后端渲染(Django 模板)? 是? 需要,最好設為 Lax 或 Strict
前后端分離 + Cookie 登錄? 是? 必須關注(建議 None + Secure)
前后端分離 + JWT 登錄? 否? 不用管 SameSite,隨它去

Https_only

https_only=True(也叫 secure=True)確實是為了強制瀏覽器只在 HTTPS 請求時發送 Cookie,而且它的確跟你的測試環境用 HTTP 有沖突。

在 Django / FastAPI / Flask 里,如果你設置:

response.set_cookie(key="sessionid",value="abc123",secure=True  # 或 https_only=True
)

它的作用是:

🚫 瀏覽器只會在

HTTPS 請求

? 如果是 HTTP 請求,瀏覽器會完全忽略這個 Cookie。

🔐 為什么要這么做?

? 防止中間人攻擊(Man-in-the-middle attack)

? 保證 Cookie 不被 HTTP 劫持或監聽

? 是現代 Web 安全的基本要求,特別是在登錄、權限等敏感操作中非常重要

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

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

相關文章

Web攻防—SSRF服務端請求偽造Gopher偽協議無回顯利用

前言 重學Top10的第二篇&#xff0c;希望各位大佬不要見笑。 SSRF原理 SSRF又叫服務端請求偽造&#xff0c;是一種由服務端發起的惡意請求&#xff0c;SSRF發生在應用程序允許攻擊者誘使服務器向任意域或資源發送未經授權的請求時。服務器充當代理&#xff0c;執行攻擊者構造…

Hibernate:讓對象與數據庫無縫對話的全自動ORM框架

一、為什么需要全自動ORM&#xff1f; 在手動編寫SQL的時代&#xff0c;開發者需要在Java代碼和數據庫表之間來回切換&#xff1a; // Java對象 public class User {private Long id;private String name;// getters and setters }// SQL語句 SELECT * FROM user WHERE id ?…

C語言超詳細指針知識(一)

通過前面一段時間C語言的學習&#xff0c;我們了解了數組&#xff0c;函數&#xff0c;操作符等的相關知識&#xff0c;今天我們將要開始進行指針的學習&#xff0c;這是C語言中較難掌握的一個部分&#xff0c;一定要認真學習&#xff01;&#xff01;&#xff01; 1.內存與地址…

程序化廣告行業(70/89):ABTester系統助力落地頁優化實踐

程序化廣告行業&#xff08;70/89&#xff09;&#xff1a;ABTester系統助力落地頁優化實踐 在程序化廣告領域摸爬滾打多年&#xff0c;深知持續學習和知識共享的重要性。寫這篇博客&#xff0c;就是希望能和大家一起深入探索程序化廣告行業&#xff0c;共同學習、共同進步。今…

項目管理(高軟56)

系列文章目錄 項目管理 文章目錄 系列文章目錄前言一、進度管理二、配置管理三、質量四、風險管理五、真題總結 前言 本節主要講項目管理知識&#xff0c;這些知識聽的有點意思啊。對于技術人想創業&#xff0c;單干的都很有必要聽聽。 一、進度管理 二、配置管理 三、質量 四…

常見的后綴名

.exe .exe&#xff08;“executable”&#xff08;可執行的&#xff09;&#xff09;是 Windows 操作系統中最常見的可執行文件擴展名。此類文件包含了計算機能夠直接運行的機器碼指令。當用戶雙擊 .exe 文件時&#xff0c;操作系統會讀取其中的指令并執行相應的程序或任務。…

XILINX DDR3專題---(1)IP核時鐘框架介紹

1.什么是Reference Clock&#xff0c;這個時鐘一定是200MHz嗎&#xff1f; 2.為什么APP_DATA是128bit&#xff0c;怎么算出來的&#xff1f; 3.APP &#xff1a;MEM的比值一定是1:4嗎&#xff1f; 4.NO BUFFER是什么意思&#xff1f; 5.什么情況下Reference Clock的時鐘源可…

Doris 安裝部署、實際應用及優化實踐:對比 ClickHouse 的深度解析

在實時分析、報表系統以及高并發 OLAP 查詢等場景中&#xff0c;列式存儲數據庫因其卓越的查詢性能逐漸成為主流。Doris 和 ClickHouse 是近年來最受歡迎的兩款開源 OLAP 引擎&#xff0c;本文將系統介紹 Doris 的安裝部署、應用場景及優化實踐&#xff0c;并與 ClickHouse 做一…

OracleLinuxR5U5系統重啟后啟動數據庫oracle23ai

1、切換到oracle用戶 [rootOracleLinux-R9-U5 ~]# su oracle2、查看oracle是否配置了ORACLE_SID [oracleOracleLinux-R9-U5 root]$ cd ~ [oracleOracleLinux-R9-U5 ~]$ cat .bash_profile3、輸出內容如下&#xff1a; [oracleOracleLinux-R9-U5 ~]$ cat .bash_profile # .ba…

【正點原子】STM32MP257 同構多核架構下的 ADC 電壓采集與處理應用開發實戰

在嵌入式系統中&#xff0c;ADC模擬電壓的讀取是常見的需求。如何高效、并發、且可控地完成數據采集與處理&#xff1f;本篇文章通過雙線程分別綁定在 Linux 系統的不同 CPU 核心上&#xff0c;采集 /sys/bus/iio 接口的 ADC 原始值與縮放系數 scale&#xff0c;并在另一個核上…

電商用戶購物行為分析:基于K-Means聚類與分類驗證的完整流程

隨著電商行業的快速發展,用戶行為分析成為企業優化營銷策略、提升用戶體驗的重要手段。通過分析用戶的購物行為數據,企業可以挖掘出用戶群體的消費特征和行為模式,從而制定更加精準的營銷策略。本文將詳細介紹一個基于Python實現的電商用戶購物行為分析系統,涵蓋數據預處理…

AMGCL庫的Backends及使用示例

AMGCL庫的Backends及使用示例 AMGCL是一個用于解決大型稀疏線性方程組的C庫&#xff0c;它提供了多種后端(backends)實現&#xff0c;允許用戶根據不同的硬件和性能需求選擇合適的計算后端。 AMGCL支持的主要Backends 內置Backends: builtin - 默認的純C實現block - 支持塊狀…

Express中間件(Middleware)詳解:從零開始掌握(3)

實用中間件模式25例 1. 基礎增強模式 請求屬性擴展 function extendRequest() {return (req, res, next) > {req.getClientLanguage () > {return req.headers[accept-language]?.split(,)[0] || en;};next();}; } 響應時間頭 function responseTime() {return (r…

05--MQTT物聯網協議

一、MQTT的概念 MQTT 協議快速入門 2025&#xff1a;基礎知識和實用教程 | EMQ 1.MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一種輕量級、基于發布-訂閱模式的消息傳輸協議&#xff0c;適用于資源受限的設備和低帶寬、高延遲或不穩定的網絡環境。它…

數據結構與算法——鏈表OJ題詳解(2)

文章目錄 一、前言二、OJ續享2.1相交鏈表2.2環形鏈表12.2環形鏈表2 三、總結 一、前言 哦了兄弟們&#xff0c;咱們上次在詳解鏈表OJ題的時候&#xff0c;有一部分OJ題呢up并沒有整理完&#xff0c;這一個星期呢&#xff0c;up也是在不斷的學習并且沉淀著&#xff0c;也是終于…

SQL Server AlwaysOn (SQL 查詢數據詳解及監控用途)

修正后的完整查詢 SELECT ar.replica_server_name AS [副本名稱],ar.availability_mode_desc AS [同步模式],DB_NAME(dbr.database_id) AS [數據庫名稱],dbr.database_state_desc AS [數據庫狀態],dbr.synchronization_state_desc AS [同步狀態],dbr.synchronization_health_d…

力扣熱題100刷題day63|49.字母異位詞分組

目錄 一、哈希表相關理論 二、思路 核心思路 三、相關題目 四、總結 一、哈希表相關理論 代碼隨想錄刷題day15|&#xff08;哈希表篇&#xff09;242.有效的字母異位詞、383.贖金信-CSDN博客 二、思路 首先&#xff0c;創建一個map集合&#xff0c;遍歷字符串數組&…

愛普生可編程晶振SG8201CJ和SG8200CJ在胃鏡機器人發揮重要作用

在醫療機器人技術高速發展的今天&#xff0c;胃鏡機器人作為胃腸道疾病診斷與治療的創新設備&#xff0c;正逐漸改變傳統診療模式。其復雜精密的系統需要精準的時間同步與穩定的信號輸出&#xff0c;胃鏡機器人是一種先進的醫療設備&#xff0c;用于無創性地檢查胃部疾病。與傳…

Ubuntu22環境下,Docker部署阿里FunASR的gpu版本

番外: 隨著deepseek的爆火,人工智能相關的開發變得異常火爆,相關的大模型開發很常見的agent智能體需要ASR語音識別的功能,阿里開源的FunASR幾乎是把一個商業的項目放給我們使用了。那么我們項目中的生產環境怎么部署gpu版本的語音識別服務呢?經過跟deepseek的一上午的極限…

圖解Java設計模式

1、設計模式面試題 2、設計模式的重要性 3、7大設計原則介紹 3.1、單一職責原則