【網絡安全】一文帶你了解什么是【CSRF攻擊】

CSRF(Cross-Site Request Forgery,跨站請求偽造)是一種網絡攻擊方式,它利用已認證用戶在受信任網站上的身份,誘使用戶在不知情的情況下執行惡意操作。具體來說,攻擊者通過各種方式(如發送惡意鏈接、在第三方網站上嵌入惡意代碼等)誘導用戶的瀏覽器發送未經授權的請求到受信任的網站。這些請求會攜帶用戶的認證信息(如Cookie、Session),從而讓受信任的網站誤以為是用戶本人發起的合法請求。

目錄

1?CSRF攻擊的基本原理

2 預防CSRF攻擊的方法?

3?使用CSRF令牌(Token)的具體實現

3.1?在服務器端生成CSRF令牌

3.2?在HTML表單中包含CSRF令牌

3.3?在服務器端驗證CSRF令牌

3.4?解析請求體(中間件)

3.5?完整的示例代碼

3.7?注意事項


1?CSRF攻擊的基本原理

  • 用戶登錄受信任的網站:用戶在受信任的網站上登錄,瀏覽器保存了該網站的會話Cookie。
  • 用戶訪問惡意網站:攻擊者誘導用戶訪問惡意網站或點擊惡意鏈接。
  • 惡意網站發送請求:惡意網站構造一個請求,利用用戶的瀏覽器發送到受信任的網站。由于用戶已經登錄,瀏覽器會自動附帶用戶的會話Cookie。
  • 受信任的網站處理請求:受信任的網站接收到請求后,看到附帶的合法會話Cookie,以為這是用戶發起的合法請求,從而執行相應的操作。

2 預防CSRF攻擊的方法?

  • 使用CSRF令牌(Token):在每次提交表單時,服務器生成一個唯一的CSRF令牌,并將其包含在表單中。服務器在處理請求時驗證令牌的有效性,確保請求來自合法的來源。
  • 驗證HTTP頭部:檢查請求的來源(Referer或Origin頭部),確保請求是從受信任的域名發出的。
  • 使用雙重提交Cookie:在請求中同時包含會話Cookie和一個自定義的CSRF令牌,服務器驗證這兩個值是否一致。
  • 使用SameSite Cookie屬性:設置Cookie的SameSite屬性為Strict或Lax,限制Cookie的跨站使用,從而減少CSRF攻擊的風險。

CSRF攻擊的目標通常是執行用戶不希望的操作,例如更改賬戶設置、進行交易或發送敏感數據等。因此,理解和防范CSRF攻擊對于保護用戶的安全至關重要。

3?使用CSRF令牌(Token)的具體實現

使用CSRF令牌(Token)是防范CSRF攻擊的一種有效方法。下面是一個具體的實現步驟,假設你使用的是Node.js和Express框架,前端使用HTML和JavaScript。

3.1?在服務器端生成CSRF令牌

首先,需要在服務器端生成一個唯一的CSRF令牌,并將其存儲在用戶的會話中。

const express = require('express');
const session = require('express-session');
const crypto = require('crypto');const app = express();app.use(session({secret: 'your_secret_key',resave: false,saveUninitialized: true
}));// 中間件:生成CSRF令牌并存儲在會話中
app.use((req, res, next) => {if (!req.session.csrfToken) {req.session.csrfToken = crypto.randomBytes(32).toString('hex');}next();
});

3.2?在HTML表單中包含CSRF令牌

在服務器端的響應中,需要將CSRF令牌包含在HTML表單中,通常以隱藏字段的形式。

app.get('/form', (req, res) => {res.send(`<form action="/submit" method="POST"><input type="hidden" name="csrfToken" value="${req.session.csrfToken}"><!-- 其他表單字段 --><button type="submit">Submit</button></form>`);
});

3.3?在服務器端驗證CSRF令牌

在處理表單提交請求時,服務器需要驗證提交的CSRF令牌是否有效。

app.post('/submit', (req, res) => {const { csrfToken } = req.body;if (csrfToken !== req.session.csrfToken) {return res.status(403).send('CSRF token mismatch');}// 處理表單提交res.send('Form submission successful');
});

3.4?解析請求體(中間件)

為了從POST請求中解析CSRF令牌,需要使用body-parser中間件。

const bodyParser = require('body-parser');app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

3.5?完整的示例代碼

下面是完整的示例代碼,將上述步驟結合起來:

const express = require('express');
const session = require('express-session');
const crypto = require('crypto');
const bodyParser = require('body-parser');const app = express();app.use(session({secret: 'your_secret_key',resave: false,saveUninitialized: true
}));app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());app.use((req, res, next) => {if (!req.session.csrfToken) {req.session.csrfToken = crypto.randomBytes(32).toString('hex');}next();
});app.get('/form', (req, res) => {res.send(`<form action="/submit" method="POST"><input type="hidden" name="csrfToken" value="${req.session.csrfToken}"><!-- 其他表單字段 --><button type="submit">Submit</button></form>`);
});app.post('/submit', (req, res) => {const { csrfToken } = req.body;if (csrfToken !== req.session.csrfToken) {return res.status(403).send('CSRF token mismatch');}// 處理表單提交res.send('Form submission successful');
});app.listen(3000, () => {console.log('Server is running on http://localhost:3000');
});

3.7?注意事項

  • CSRF令牌的生成和驗證應盡量使用加密安全的隨機數生成方法
  • 確保CSRF令牌的存儲和傳輸安全,避免令牌被第三方竊取。
  • 每次會話開始時生成新的CSRF令牌,確保令牌的唯一性和不可預測性。

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

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

相關文章

excel修改批量一列單價的金額并保留1位小數

1.打開表格&#xff0c;要把單價金額變成現在的兩倍&#xff0c;數據如下&#xff1a; 2.把單價這一列粘貼到一個新的sheet頁面&#xff0c;在B2單元格輸入公式&#xff1a;A2*2 然后按enter回車鍵,這時候吧鼠標放到B2單元格右下角&#xff0c;會出現一個黑色的小加號&#xf…

《信創數據庫沙龍上海站:共話發展,智啟未來》

2024 年 6 月 29 日周六 14:00&#xff0c;信創數據庫沙龍在上海市徐匯區建國西路 285 號科投大廈 13 樓金星廳成功舉辦。本次活動吸引了眾多學術界和產業界的專家、學者以及技術愛好者參與。 活動中&#xff0c;多位嘉賓帶來了精彩分享。薛曉剛探討了 Oracle 在國內的前景&a…

EAGLE-2:一種高效無損的推測性采樣方法,提升LLM的推理速度。

歡迎關注我的公眾號&#xff1a;Halo咯咯 01。概述 北京大學的研究人員聯合微軟研究院、滑鐵盧大學以及Vector研究所共同推出了EAGLE-2&#xff0c;這是一種利用上下文感知的動態草圖樹來增強推測性采樣的方法。EAGLE-2在先前的EAGLE方法基礎上進行了改進&#xff0c;不僅顯著…

python列表、元組、集合、字典整理

特征對比 下面是Python中列表、元組、集合和字典的特征對比表格&#xff1a; 特征列表 (List)元組 (Tuple)集合 (Set)字典 (Dictionary)定義符號[ ]( ){ }{ }可變性可變不可變可變可變有序性有序有序無序無序元素訪問通過索引訪問&#xff0c;索引從0開始通過索引訪問&#x…

一個啟動腳本例子

一、全部代碼 #!/bin/bash DATE$(date %Y%m%d)SOURCE"abc.jar" TARGET"backup/abc.jar.jew.$DATE"if [ -f "$SOURCE" ]; thencp "$SOURCE" "$TARGET" firm -f abc.jar mv abc_1.jar abc.jarpidNumps -ef | grep $SOURCE |…

【源碼+文檔+調試講解】基于vue的線上點餐系統

摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了線上點餐系統的開發全過程。通過分析線上點餐系統管理的不足&#xff0c;創建了一個計算機管理線上點餐系統的方案。文章介紹了線上點餐系統的系統分析部分&…

電腦提示vcomp140.dll缺失怎么解決?vcomp140.dll是什么文件?

當你的電腦提示vcomp140.dll缺失的時候&#xff0c;你就應該要注意了&#xff0c;因為這個提示的出現&#xff0c;代表你的某個程序開不了&#xff01;想要程序能正常運行&#xff0c;那么只要修復好這個vcomp140.dll文件就可以了&#xff0c;下面我們就來給大家詳細的說說說vc…

超詳細之IDEA上傳項目到Gitee完整步驟

1. 注冊gitee 賬號密碼&#xff0c;gitee官網地址&#xff1a;Gitee官網&#xff0c;注冊完成后&#xff0c;登錄。 2. 創建倉庫&#xff0c;在主頁左下角有新建按鈕&#xff0c;點擊新建后會進入到此頁面填寫倉庫信息。 3. 創建完成后復制倉庫地址 4. 打開IntelliJ IDEA新建或…

python自動化之schedule

目錄 代碼&#xff08;以每5秒1次為例&#xff09;: 每5分鐘1次 每2小時1次 每天18:00執行 用到的庫&#xff1a;schedule&#xff0c;time 實現的效果&#xff1a;按秒來運行任務&#xff0c;按分鐘來運行任務&#xff0c;按小時來運行任務&#xff0c;按天來運行任務 代…

鴻蒙3.0WebView網絡錯誤問題

背景&#xff0c;榮耀9x&#xff0c;混淆才會出這個問題。 [ERROR:ssl_client_socket_impl.cc(981)] handshake failed; returned -1, SSL error code 1, net_error -2 NetError.java int SSLClientSocketImpl::DoHandshake() {crypto::OpenSSLErrStackTracer err_tracer(FRO…

Oracle新特性速遞:未來數據庫技術的無限可能

文章目錄 一、自治數據庫&#xff1a;智能化與自動化的革命二、機器學習集成&#xff1a;智能數據分析的新境界三、區塊鏈技術&#xff1a;確保數據完整性與透明性四、云原生數據庫&#xff1a;靈活擴展與快速部署五、人工智能優化器&#xff1a;智能查詢執行計劃《Oracle從入門…

centos7搭建zookeeper 集群 1主2從

centos7搭建zookeeper 集群 準備前提規劃防火墻開始搭建集群192.168.83.144上傳安裝包添加環境變量修改zookeeper 的配置 192.168.83.145 和 192.168.83.146 配置 啟動 集群 準備 vm 虛擬機centos7系統zookeeper 安裝包FinalShell或者其他shell工具 前提 虛擬機安裝好3臺cen…

為什么我的Skype點數不見了?如何重新激活 Skype 點數?

您超過180天沒有使用過點數打電話功能&#xff0c;點數暫時封存在您的賬戶里面&#xff0c;需要您手動激活&#xff08;目前必須要登錄網頁版skype&#xff09; 可再次使用。 如何重新激活 Skype 點數&#xff1f; 登錄到你的帳戶 . 選擇 重新激活信用額度 .注意&#xff1a; …

MiniTest

1.編輯case文件first_test.py import minium class FirstTest(minium.MiniTest): def test_get_system_info(self): 2.編輯配置文件config.json { "project_path": "path/to/project", "dev_tool_path": "path/to/cli", "…

【Python】 Joblib:高效的Python作業調度和緩存工具

那年夏天我和你躲在 這一大片寧靜的海 直到后來我們都還在 對這個世界充滿期待 今年冬天你已經不在 我的心空出了一塊 很高興遇見你 讓我終究明白 回憶比真實精彩 &#x1f3b5; 王心凌《那年夏天寧靜的海》 在Python數據科學和機器學習中&#xff0c;處理…

喜訊!安全狗榮獲“2023年網絡安全技術支撐優秀單位”稱號

6月6日&#xff0c;由中共廈門市委網絡安全和信息化委員會辦公室&#xff08;以下簡稱“廈門市委網信辦”&#xff09;主辦的2023年網絡安全技術支撐優秀單位頒獎儀式在廈門成功舉行。 作為國內云原生安全領導廠商&#xff0c;安全狗受邀出席此次活動。 會上&#xff0c;安全狗…

預約小程序源碼,云開發技術,無需服務器

介紹&#xff1a; 很多企業的業務都需要通過服務預約來完成&#xff0c;比如酒店、美容、家政等等。 但很多商家因缺少合適的服務預訂工具&#xff0c;而不知道如何讓客戶盡快預約。 這種情況下&#xff0c;制作一個自己的預約小程序&#xff0c;客戶只需要掃碼或者在微信里…

Eureka的橋梁:服務消費者交互全解析

Eureka的橋梁&#xff1a;服務消費者交互全解析 在微服務架構中&#xff0c;服務發現是確保服務間有效通信的關鍵機制。Eureka&#xff0c;作為Netflix開源的服務發現框架&#xff0c;扮演著服務注冊中心的角色&#xff0c;為服務消費者和服務提供者提供了一個動態的服務注冊與…

調用基類的純虛函數,如何知道純虛函數會調用哪個派生類(子類)中的實現。

在 C 中&#xff0c;調用基類的純虛函數實際上是通過運行時多態性來決定調用哪一個派生類的實現。這種機制是通過虛函數表&#xff08;vtable&#xff09;和虛函數指針&#xff08;vptr&#xff09;實現的。下面我們來詳細探討一下這個過程。 虛函數表和虛函數指針 虛函數表&a…

開放簽電子簽章系統(企業版)V2.0.5版本詳細更新內容

本次版本迭代間隔1月之久&#xff0c;新功能主要是增加文件的簽署記錄并生成報告&#xff0c;其次優化支持非A4規格的簽約文件&#xff08;這個費時很久&#xff0c;主要原因是推翻之前的位置計算的邏輯&#xff0c;重新計算坐標位置&#xff09;&#xff0c;詳細更新內容如下&…