日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

一个express老系统csrf漏洞修复

發(fā)布時(shí)間:2025/4/5 windows 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个express老系统csrf漏洞修复 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一個(gè)運(yùn)行快兩年的express框架web系統(tǒng),被安全部門(mén)審核存在csrf漏洞,項(xiàng)目使用的前后端分離的形式,所有功能操作,通過(guò)ajax調(diào)用后端接口來(lái)完成,查了很多資料,一個(gè)基本的防御思想就是驗(yàn)證隨機(jī)數(shù)了,為什么隨機(jī)數(shù)就可以實(shí)現(xiàn)csrf的防御呢?本文將針對(duì)該問(wèn)題進(jìn)行分解

什么是csrf

csrf(跨站請(qǐng)求偽造)是一種網(wǎng)絡(luò)攻擊方式,怎么實(shí)現(xiàn)這種攻擊方式呢?
1.登錄受信任網(wǎng)站A,并在本地生成Cookie
2.在不登出A的情況下,訪問(wèn)危險(xiǎn)網(wǎng)站B,B站存在一個(gè)針對(duì)A站惡意的路由操作,如刪除某條記錄
用戶(hù)操作后,就會(huì)刪除造成對(duì)A站的攻擊
如果不滿(mǎn)足以上兩個(gè)條件中的一個(gè),就不會(huì)受到CSRF的攻擊

示例1:
  銀行網(wǎng)站A,它以GET請(qǐng)求來(lái)完成銀行轉(zhuǎn)賬的操作,如:
http://www.mybank.com/Transfer.php?toBankId=11&money=1000
  危險(xiǎn)網(wǎng)站B,它里面有一段HTML的代碼如下:
  <img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
  首先,你登錄了銀行網(wǎng)站A,然后訪問(wèn)危險(xiǎn)網(wǎng)站B,噢,這時(shí)你會(huì)發(fā)現(xiàn)你的銀行賬戶(hù)少了1000塊......
雖然存在著巨大的不確定性,但是這種漏洞危害性也是巨大的

csrf的防御策略

針對(duì)以上的攻擊方式,我們要采取防御措施

  • 驗(yàn)證 HTTP Referer 字段

HTTP 協(xié)議,在 HTTP 頭中有一個(gè)字段叫 Referer,它記錄了該 HTTP 請(qǐng)求的來(lái)源地址。在通常情況下,訪問(wèn)一個(gè)安全受限頁(yè)面的請(qǐng)求來(lái)自于同一個(gè)網(wǎng)站,比如需要訪問(wèn) http://bank.example/withdraw?...,用戶(hù)必須先登陸 bank.example,然后通過(guò)點(diǎn)擊頁(yè)面上的按鈕來(lái)觸發(fā)轉(zhuǎn)賬事件。這時(shí),該轉(zhuǎn)帳請(qǐng)求的 Referer 值就會(huì)是轉(zhuǎn)賬按鈕所在的頁(yè)面的 URL,通常是以 bank.example 域名開(kāi)頭的地址。而如果黑客要對(duì)銀行網(wǎng)站實(shí)施 CSRF 攻擊,他只能在他自己的網(wǎng)站構(gòu)造請(qǐng)求,當(dāng)用戶(hù)通過(guò)黑客的網(wǎng)站發(fā)送請(qǐng)求到銀行時(shí),該請(qǐng)求的 Referer 是指向黑客自己的網(wǎng)站。因此,要防御 CSRF 攻擊,銀行網(wǎng)站只需要對(duì)于每一個(gè)轉(zhuǎn)賬請(qǐng)求驗(yàn)證其 Referer 值,如果是以 bank.example 開(kāi)頭的域名,則說(shuō)明該請(qǐng)求是來(lái)自銀行網(wǎng)站自己的請(qǐng)求,是合法的。如果 Referer 是其他網(wǎng)站的話(huà),則有可能是黑客的 CSRF 攻擊,拒絕該請(qǐng)求。
由于Referer可以篡改,所以這種方案安全性較低。

  • 驗(yàn)證碼的方式

每一次操作前添加驗(yàn)證碼,該種方案較繁瑣,一般不會(huì)采用。

  • 隨機(jī)數(shù)驗(yàn)證

現(xiàn)在csrf防御主要采用該種方式,基本流程

  • 服務(wù)端產(chǎn)生一個(gè)隨機(jī)數(shù),發(fā)送到客戶(hù)端
  • 客戶(hù)端在表單提交時(shí),攜帶該隨機(jī)數(shù)
  • 在服務(wù)端驗(yàn)證該隨機(jī)數(shù)
  • 基本的防御思想就是這樣的流程,那么怎么來(lái)怎么實(shí)現(xiàn)這樣的業(yè)務(wù)代碼。

    由于項(xiàng)目是一個(gè)老的系統(tǒng),所以采取切面處理的方式,

  • 在服務(wù)端生成一個(gè)隨機(jī)數(shù)csrf,然后加密生成csrftoken,然后將這兩個(gè)值發(fā)送到客戶(hù)端
  • 在請(qǐng)求時(shí)將header中攜帶csrftoken
  • 服務(wù)端驗(yàn)證加密后csrf和csrftoken是否相等
  • 該種方案略顯復(fù)雜,精簡(jiǎn)一下

  • 服務(wù)生成一個(gè)隨機(jī)數(shù)token,設(shè)置cookie
  • 在客戶(hù)端生成經(jīng)過(guò)md5(token)生成一個(gè)csrftoken,在請(qǐng)求時(shí)攜帶在header中
  • 在服務(wù)端,取cookie中的token,經(jīng)過(guò)md(token)算法后和header中的csrftoken做比較
  • 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的一个express老系统csrf漏洞修复的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。