久久国产av,国产激情欧美有码,亚洲国产综合精品2020,国产无套粉嫩白浆内精

如何防止token被截獲 如何防止token被冒用

2023-05-04 00:56:15 生財(cái)有道 3044次閱讀 投稿:晚安

如何防止token被截獲 如何防止token被冒用

如何防止token被截獲 如何防止token被冒用?很多人不了解,今天各百科為大家?guī)硐嚓P(guān)內(nèi)容,下面小編為大家整理介紹。

從網(wǎng)絡(luò)傳輸

CSRF是什么?

跨站請求偽造(跨站請求偽造)是一種網(wǎng)絡(luò)攻擊方式。它被列為2007年互聯(lián)網(wǎng)20大安全風(fēng)險(xiǎn)之一,也稱為“一鍵攻擊”或會話騎行,通??s寫為CSRF或XSRF,這是一種惡意利用網(wǎng)站,也稱為釣魚網(wǎng)站。雖然聽起來像是跨站腳本(XSS),但與XSS有很大不同,攻擊方式也幾乎不同。XSS在網(wǎng)站中利用可信用戶,而CSRF通過偽裝可信用戶的請求來利用可信網(wǎng)站。與XSS攻擊相比,CSRF攻擊通常不太受歡迎(因此預(yù)防它的資源很少)且難以預(yù)防,因此被認(rèn)為比XSS更危險(xiǎn)。

CSRF可以做什么?

你可以這樣理解CSRF攻擊:攻擊者竊取你的身份并冒充你發(fā)送惡意請求。CSRF能做的事情包括:以你的名義發(fā)郵件,發(fā)信息,盜取你的賬號,甚至購買商品,用虛擬貨幣轉(zhuǎn)賬.造成的問題包括:個人隱私泄露和財(cái)產(chǎn)安全。

這么厲害,那它的原理是什么?

登錄到可信網(wǎng)站A并在本地生成Cookie。在不注銷A的情況下,訪問危險(xiǎn)網(wǎng)站b,看到這里,你可能會說“如果我不滿足上述兩個條件中的一個,我就不會被CSRF攻擊”。是的,確實(shí)是這樣,但是你不能保證以下情況不會發(fā)生:1。你不能保證在你登錄一個網(wǎng)站后,你不會打開一個標(biāo)簽頁并訪問另一個網(wǎng)站。2.您不能保證您的本地Cookie會在您關(guān)閉瀏覽器后立即過期,并且您的最后一次會話已經(jīng)結(jié)束。(其實(shí)關(guān)閉瀏覽器并不能結(jié)束一個會話,但是大多數(shù)人誤以為關(guān)閉瀏覽器等同于注銷/結(jié)束會話.) 3.上圖所謂的攻擊網(wǎng)站,可能是一個可信的、經(jīng)常訪問的網(wǎng)站,還有其他漏洞。

詳細(xì)介紹了的原理

幾種常見的攻擊類型

GET類型的CSRF

這種類型的CSRF一般是由于程序員安全意識薄弱造成的。GET類型的CSRF的使用非常簡單,只需要一個https://pic.qubaike.com/pic/2023-03-24/gb01tji34qq

img src=https://pic.qubaike.com/pic/2023-03-24/oum3tazcatz Xx=11發(fā)出了一個https://pic.qubaike.com/pic/2023-03-24/zcijzczacif CSRF所在的地址,就可以完成攻擊。

烏云案例

波斯特型CSRF

這種類型的CSRF不像GET那樣有害,它通常使用自動提交表單,例如:

form action=https://pic.qubaike.com/pic/2023-03-24/lirtitomf2c # # #/csrf . PHP method=POST input type=' text ' name=' xx ' value=' 11 '//formscript document . forms 0 . submit();/script訪問此頁面后,表單會自動提交,相當(dāng)于模擬用戶完成一個POST操作。

其他淫穢流CSRF

基本認(rèn)證CSRF(常用于路由器)3360

POC:

img=3358 admin 3360 admin @ 192 . 168 . 1 . 1/鏡像加載后,路由器會給用戶一個合法的會話,為下一步做好準(zhǔn)備。

防御CSRF的策略

目前業(yè)界防御CSRF攻擊的策略主要有三種:驗(yàn)證https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f Referer字段;向請求地址添加令牌并驗(yàn)證它;自定義https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f頭中的屬性并驗(yàn)證它。下面詳細(xì)介紹三種策略。

驗(yàn)證 https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f Referer 字段

根據(jù)https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f協(xié)議,https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f頭中有一個名為Referer的字段,記錄了https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f請求的源地址。通常,訪問具有受限安全性的頁面的請求來自同一個網(wǎng)站,例如http://bank.example/withdraw?帳戶=bobamount=1000000 for=mallory。用戶必須先登錄bank.example,然后點(diǎn)擊頁面上的按鈕觸發(fā)轉(zhuǎn)賬事件。因此,為了防御CSRF攻擊,網(wǎng)站只需要為每個轉(zhuǎn)移請求驗(yàn)證其Referer值,如果它是基于ba的

nk.example 開頭的域名,則說明該請求是來自銀行網(wǎng)站自己的請求,是合法的。如果 Referer 是其他網(wǎng)站的話,則有可能是黑客的 CSRF 攻擊,拒絕該請求。這種方法的顯而易見的好處就是簡單易行,網(wǎng)站的普通開發(fā)人員不需要操心 CSRF 的漏洞,只需要在最后給所有安全敏感的請求統(tǒng)一增加一個攔截器來檢查 Referer 的值就可以。然而,這種方法并非萬無一失。Referer 的值是由瀏覽器提供的,雖然 https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f 協(xié)議上有明確的要求,但是每個瀏覽器對于 Referer 的具體實(shí)現(xiàn)可能有差別,并不能保證瀏覽器自身沒有安全漏洞。使用驗(yàn)證 Referer 值的方法,就是把安全性都依賴于第三方(即瀏覽器)來保障,從理論上來講,這樣并不安全。事實(shí)上,對于某些瀏覽器,比如IE6 或 FF2,目前已經(jīng)有一些方法可以篡改 Referer 值。如果 網(wǎng)站支持IE6 瀏覽器,黑客完全可以把用戶瀏覽器的 Referer 值設(shè)為以 bank.example 域名開頭的地址,這樣就可以通過驗(yàn)證,從而進(jìn)行 CSRF 攻擊。即便是使用最新的瀏覽器,黑客無法篡改 Referer 值,這種方法仍然有問題。因?yàn)?Referer 值會記錄下用戶的訪問來源,有些用戶認(rèn)為這樣會侵犯到他們自己的隱私權(quán),特別是有些組織擔(dān)心 Referer 值會把組織內(nèi)網(wǎng)中的某些信息泄露到外網(wǎng)中。因此,用戶自己可以設(shè)置瀏覽器使其在發(fā)送請求時(shí)不再提供 Referer。當(dāng)他們正常訪問銀行網(wǎng)站時(shí),網(wǎng)站會因?yàn)檎埱鬀]有 Referer 值而認(rèn)為是 CSRF 攻擊,拒絕合法用戶的訪問。

在請求地址中添加 token 并驗(yàn)證

CSRF 攻擊之所以能夠成功,是因?yàn)楹诳涂梢酝耆珎卧煊脩舻恼埱?,該請求中所有的用戶?yàn)證信息都是存在于 cookie 中,因此黑客可以在不知道這些驗(yàn)證信息的情況下直接利用用戶自己的 cookie 來通過安全驗(yàn)證。要抵御 CSRF,關(guān)鍵在于在請求中放入黑客所不能偽造的信息,并且該信息不存在于 cookie 之中??梢栽?https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f 請求中以參數(shù)的形式加入一個隨機(jī)產(chǎn)生的 token,并在服務(wù)器端建立一個攔截器來驗(yàn)證這個 token,如果請求中沒有 token 或者 token 內(nèi)容不正確,則認(rèn)為可能是 CSRF 攻擊而拒絕該請求。這種方法要比檢查 Referer 要安全一些,token 可以在用戶登陸后產(chǎn)生并放于 session 之中,然后在每次請求時(shí)把 token 從 session 中拿出,與請求中的 token 進(jìn)行比對,但這種方法的難點(diǎn)在于如何把 token 以參數(shù)的形式加入請求。對于 GET 請求,token 將附在請求地址之后,這樣 URL 就變成 https://pic.qubaike.com/pic/2023-03-24/tpej5vapief 而對于 POST 請求來說,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,這樣就把 token 以參數(shù)的形式加入請求了。但是,在一個網(wǎng)站中,可以接受請求的地方非常多,要對于每一個請求都加上 token 是很麻煩的,并且很容易漏掉,通常使用的方法就是在每次頁面加載時(shí),使用 javascript 遍歷整個 dom 樹,對于 dom 中所有的 a 和 form 標(biāo)簽后加入 token。這樣可以解決大部分的請求,但是對于在頁面加載之后動態(tài)生成的 html 代碼,這種方法就沒有作用,還需要程序員在編碼時(shí)手動添加 token。該方法還有一個缺點(diǎn)是難以保證 token 本身的安全。特別是在一些論壇之類支持用戶自己發(fā)表內(nèi)容的網(wǎng)站,黑客可以在上面發(fā)布自己個人網(wǎng)站的地址。由于系統(tǒng)也會在這個地址后面加上 token,黑客可以在自己的網(wǎng)站上得到這個 token,并馬上就可以發(fā)動 CSRF 攻擊。為了避免這一點(diǎn),系統(tǒng)可以在添加 token 的時(shí)候增加一個判斷,如果這個鏈接是鏈到自己本站的,就在后面添加 token,如果是通向外網(wǎng)則不加。不過,即使這個 csrftoken 不以參數(shù)的形式附加在請求之中,黑客的網(wǎng)站也同樣可以通過 Referer 來得到這個 token 值以發(fā)動 CSRF 攻擊。這也是一些用戶喜歡手動關(guān)閉瀏覽器 Referer 功能的原因。

在 https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f 頭中自定義屬性并驗(yàn)證

這種方法也是使用 token 并進(jìn)行驗(yàn)證,和上一種方法不同的是,這里并不是把 token 以參數(shù)的形式置于 https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f 請求之中,而是把它放到 https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f 頭中自定義的屬性里。通過 XMLhttps://pic.qubaike.com/pic/2023-03-24/fiivcqcfg3f 這個類,可以一次性給所有該類請求加上 csrftoken 這個 https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f 頭屬性,并把 token 值放入其中。這樣解決了上種方法在請求中加入 token 的不便,同時(shí),通過 XMLhttps://pic.qubaike.com/pic/2023-03-24/fiivcqcfg3f 請求的地址不會被記錄到瀏覽器的地址欄,也不用擔(dān)心 token 會透過 Referer 泄露到其他網(wǎng)站中去。然而這種方法的局限性非常大。XMLhttps://pic.qubaike.com/pic/2023-03-24/fiivcqcfg3f 請求通常用于 Ajax 方法中對于頁面局部的異步刷新,并非所有的請求都適合用這個類來發(fā)起,而且通過該類請求得到的頁面不能被瀏覽器所記錄下,從而進(jìn)行前進(jìn),后退,刷新,收藏等操作,給用戶帶來不便。另外,對于沒有進(jìn)行 CSRF 防護(hù)的遺留系統(tǒng)來說,要采用這種方法來進(jìn)行防護(hù),要把所有請求都改為 XMLhttps://pic.qubaike.com/pic/2023-03-24/fiivcqcfg3f 請求,這樣幾乎是要重寫整個網(wǎng)站,這代價(jià)無疑是不能接受的。

防御實(shí)例

Sailajs框架中的JavaScript 代碼示例

下面將以 JavaScript 為例,對上述三種方法分別用代碼進(jìn)行示例。

1.驗(yàn)證 Referer

// 從 https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f 頭中取得 Referer 值 var referer=req.headers.Referer; // 判斷 Referer 是否以 test.example 開頭 if((referer!=null) && (_.startsWith(referer, “test.example ”)){ // 驗(yàn)證通過 }else{ // 驗(yàn)證失敗,返回錯誤 }2.驗(yàn)證請求中的 token

var session = req.session; // 從 session 中得到 csrftoken 屬性 var token = session.csrftoken; if(token == null){ // 產(chǎn)生新的 token 放入 session 中 token = generateToken(); token.csrftoken = token ; return .... } else{ // 從 https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f 頭中取得 csrftoken var token = req.headers.csrftoken; // 從請求參數(shù)中取得 csrftoken var xhrToken = req.param('csrftoken'); if(token != null && xhrToken != null && token.equals(xhrToken)){ return ... }else{ return ... // ERROR } }https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f 頭中自定義屬性(網(wǎng)上例子)var plainXhr = dojo.xhr; // 重寫 dojo.xhr 方法 dojo.xhr = function(method,args,hasBody) { // 確保 header 對象存在 args.headers = args.header || {}; tokenValue = '<%=request.getSession(false).getAttribute("csrftoken")%>'; var token = dojo.getObject("tokenValue"); // 把 csrftoken 屬性放到頭中 args.headers<"csrftoken"> = (token) ? token : " "; return plainXhr(method,args,hasBody); };總結(jié)

CSRF 是一種危害非常大的攻擊,又很難以防范。目前幾種防御策略雖然可以很大程度上抵御 CSRF 的攻擊,但并沒有一種完美的解決方案。一些新的方案正在研究之中,比如對于每次請求都使用不同的動態(tài)口令,把 Referer 和 token 方案結(jié)合起來,甚至嘗試修改 https://pic.qubaike.com/pic/2023-03-24/lgghdpgra3f 規(guī)范,但是這些新的方案尚不成熟,要正式投入使用并被業(yè)界廣為接受還需時(shí)日。在這之前,我們只有充分重視 CSRF,根據(jù)系統(tǒng)的實(shí)際情況選擇最合適的策略,這樣才能把 CSRF 的危害降到最低

聲明:各百科所有作品(圖文、音視頻)均由用戶自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流。若您的權(quán)利被侵害,請聯(lián)系: [email protected]