以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > 波場 > Info

停止使用JSON Web代幣進行身份驗證?_COOK

Author:

Time:1900/1/1 0:00:00

“由于可擴展性,JWTokens是被推薦的認證方法。”

“JWTokens更易于使用。”

“JWToken是無狀態的,所以我們不需要使用服務器上的內存。”

我確信他們的意圖是好的,但是他們共享了一種不安全的用戶身份認證和授權用戶的方式,至少對于web應用程序是這樣的。

我們當然可以安全地使用JWT代幣,但是,我們可能不應該從頭實現它們,因為廣泛地保護它們會變得很復雜。

讓我們看一下使用JWT對用戶進行身份驗證的流程。

用戶輸入他們的用戶名和密碼——當用戶單擊登錄按鈕時,將向服務器發送一個請求,用數據庫驗證用戶的憑據。

服務器成功地驗證了用戶的身份——服務器現在使用一個密碼創建并簽署一個JWT,并在響應中返回它。

教程通常將到期時間設置為一周到30天。

客戶端在響應中接收JWT——開發人員(在像chrome這樣的客戶端中)接收它,應用一些邏輯,然后存儲它,通常是在本地存儲。

客戶端使用存儲在代幣中的信息來有條件地渲染——通常,教程使用像用戶的電子郵件、用戶名和布爾字段,如isAdmin。

客戶端將代幣添加為每個請求的標頭——如果代幣存在于本地存儲中,則用戶的會話是活動的。

服務器現在可以通過解密每個請求的簽名代幣來檢查用戶的身份。

代幣將一直有效到到期。

加密貨幣借貸平臺Salt以FTX破產影響為由停止提款:金色財經報道,根據發送給客戶的公司電子郵件,加密借貸平臺Salt暫停了提款和存款。該公司表示“FTX的倒閉影響了我們的業務”,但并未披露對FTX敞口的具體數額。Salt寫道,“在我們能夠通過準確的具體細節來確定這種影響的程度之前,我們已經暫停了在SALT平臺上的存款和取款,立即生效。公司正在與我們的合作伙伴努力合作,以確保一條清晰的前進道路,并計劃盡可能透明。”[2022/11/16 13:10:17]

以這種方式使用JWT的所有問題。

響應包含JWT。

我們遇到的第一個危險信號是在響應中返回代幣。因此,前端代碼可以自由地讀取和存儲代幣。

訪問代幣會使跨站點腳本攻擊能夠竊取用戶的身份并代表他們發送請求。因為我們沒有關于用戶的會話信息,所以可能沒有辦法知道。

JWT在到期之前一直有效。

由于JWT認證是無狀態的,一旦服務器簽署了有效的代幣,就沒有辦法撤銷用戶的會話。

因此,使用長到期窗口+不安全存儲是黑客對我們的用戶造成嚴重損害的完美組合。

撤銷它們的唯一方法是更改簽名密鑰,這實際上將注銷我們的整個用戶群,因為所有代幣都將呈現為無效。

從長遠來看,本地存儲不安全。

在本地存儲中長時間存儲內容是不安全的,因為任何人都可以在瀏覽器中訪問它。

跨站點腳本可以從本地存儲中檢索代幣,因為它沒有加密或保護。

信息可能不同步。

這個問題不像其他問題那么嚴重。

存儲像isAdmin、用戶地址等字段可能本身并不安全,但這里有一個問題。

Blockchain?.com在歐盟制裁期間停止為俄羅斯國民提供服務:金色財經報道,由于歐盟的最新制裁,加密錢包提供商Blockchain.com很快停止向俄羅斯國民提供服務的公司。Blockchain.com已通知其用戶,它將在兩周內關閉俄羅斯國民的賬戶。根據該報告,Blockchain.com將允許俄羅斯用戶在2022年10月27日之前提取資金。據報道,在此日期之后,俄羅斯國民的賬戶將被封鎖。

與之前的制裁將俄羅斯與歐盟的加密支付限制在9700美元或10,000歐元左右不同,最新的一攬子計劃全面禁止俄羅斯人和歐盟之間的跨境加密支付。目前尚不清楚俄羅斯客戶是否能夠保留訪問他們在Blockchain.com上的非托管錢包的權限。[2022/10/16 14:29:15]

由于代幣是無狀態的,因此當信息發生變化時無法更新它們。因此,用戶的用戶名、電子郵件或權限可能與數據庫中的實際值不同步。

允許跨域請求。

使用JWT,任何擁有代幣的人都可以發送有效的請求。

惡意網站可以從虛假域名向我們的網站發送請求,瀏覽器將允許它。

我們可以通過使用CORS來降低這種風險。

這些代幣對于驗證web應用程序來說并不安全,但這并不意味著它們是無用的。相反,有幾個用例可以很好地處理這些代幣。

使用JWT時:

到期窗口很小。(2小時)

請求不涉及將代幣存儲在瀏覽器中。

請求不需要加密。

一個真實的例子用例

美國證券管理局計劃向BlockFi發出停止令,要求其停止提供計息賬戶:根據美國新澤西州總檢察長辦公室發布的一份新聞稿草案,美國證券管理局計劃向新澤西州規模數十億美元的加密金融服務平臺BlockFi發布一份“即時終止令”,要求其停止提供計息賬戶。如果簽署,這可能是針對最近加密貨幣牛市期間增長過快的加密貨幣借貸平臺的首次此類行動。草案中稱,BlockFi至少在一定程度上通過出售未注冊證券的方式,為其加密貨幣借貸和交易業務提供資金和便利,稱這違反了相關證券法。BlockFi提供0.25%至8.5%的利率,利率取決于加密貨幣資產和存款規模,此外BlockFi還有一個交易平臺和比特幣獎勵信用卡。相比之下,根據Bankrate的數據,7月份第一周全國儲蓄賬戶的平均利率為0.06%。草案還強調DeFi不像傳統銀行和券商那樣提供FDIC或SPIC保險。盡管比特幣和以太幣被廣泛認為是大宗商品,但BlockFi支持的其他資產,如Chainlink和Uniswap,則不那么清晰。如果這份終止協議最終得到簽署,它將為各國如何處理其他尚未歸類的資產創造先例。BlockFi的首席執行官Zac Prince回應稱“BlockFi不知道新澤西州檢察長辦公室即將采取的任何行動。我們與新澤西州監管機構以及其他州和聯邦監管機構保持著良好的關系。”(福布斯)[2021/7/20 1:04:22]

最好的例子是控制對資源(如文件下載)的訪問。

假設我們的用戶一個月前購買了一款虛擬產品,想再次下載它。

我們會有一個開放的鏈接,使任何人都可以用來下載我們的虛擬產品嗎?

JWT代幣非常有用,因為我們可以創建短期訪問代幣來驗證用戶的身份,并臨時授予對購買內容的訪問權。

代幣不會存儲在任何地方,而且它會很快過期。因此,它允許我們輕松地處理可驗證的交易。

DeFi貨幣市場協議DMM宣布因監管部門的要求,已停止運營:DeFi貨幣市場協議DMM宣布因監管部門的要求,已停止運營,不再提供新業務,原本已發行的mToken贖回功能將無限期提供,但是收益率在2月10日左右會將至0%。另外,DMM表示將建立一個基于可用資產的額外基金,以贖回DMG代幣,具體細節將稍后公布。[2021/2/6 19:02:59]

如果我們曾經將第三方登錄與谷歌或其他提供商集成過,那么這就是使用JWT的一個很好的例子。

有狀態會話意味著服務器將用戶的會話存儲在內存或數據庫中。

盡管這需要進行一些權衡,但在實現時,它消除了前一種方法的大部分問題和安全問題。

然而,它確實帶來了一些其他的挑戰。這取決于我們的項目需求。

我們可以跟蹤用戶的會話活動(更容易)

使用有狀態會話,我們可以存儲有用的信息,如用戶的IP地址、會話持續時間、上次請求的時間戳,并查看每個用戶有多少活動會話。

服務器可以根據需要撤銷會話。

在觸發警告時(假設用戶有三個來自不同國家的活動會話),會話可以按需撤銷,以防止被盜代幣被使用——無需每30分鐘等待一次到期。

HTTP-Only cookie更安全

沒有方法可以100%安全抵御所有攻擊。

我們必須將有狀態會話代幣(如UUID字符串)存儲在HTTP-Only cookie中。

一個HTTP-Only cookie意味著cookie被自動附加到每個客戶端請求,沒有人可以訪問瀏覽器中的代幣,甚至我們自己也不行!

加密貓“CurryKitties”促銷活動悄然停止:據ccn消息,流行的以太坊游戲加密貓(CryptoKitties)背后的公司悄然停止了其“CurryKitties”促銷活動。此項活動允許用戶購買限量版的仿照NBA超級巨星庫里(Stephen Curry)形象的加密貓。目前尚不清楚促銷活動何時被取消,但其網頁已被替換為解釋該活動被無限期暫停。該網頁顯示:“我們有理由相信庫里沒有像我們想象的那樣參與CurryKitties。在我們確信他積極參與之前,我們正暫停該活動”。[2018/5/25]

HTTP-Only Cookies默認情況下阻止跨站點請求

HTTP-Only cookie應該對跨站點請求有嚴格的設置。默認情況下,如果請求來自第三方域名,cookie將不起作用。

稍后我們將深入探討這個問題。

會話在加密方面并不昂貴。

我們不必驗證經過簽名的JWT會話,因為代幣可以映射到用戶id,并存儲在基于內存的數據庫(如Redis)中,以便進行快速的訪問和讀取操作。

通常,無狀態是首選的方法,因為它允許服務在沒有任何依賴關系的情況下大量運行(狀態)。

使用有狀態會話確實給我們帶來了一個潛在的新挑戰。

CSRF攻擊

使用cookie時,我們需要注意跨站點請求偽造攻擊。

當將代幣存儲在本地存儲時,這種類型的攻擊是不可能的。然而,有兩種主要的方法可以防止這種情況。

Cookie設置

在生產環境中,我們應該設置HTTP-only,并將Secure標志設置為true(如果請求不是 HTTPS,瀏覽器不會放置 cookie)。

對于CSRF攻擊,應該將Same-Site標志設置為“strict”。

將此標志設置為strict可以確保只允許來自與服務器相同域的請求。

例如,如果第三方網站試圖在CSRF攻擊中使用用戶的會話執行請求,則不會設置 auth cookie,因為攻擊者的域與您的域不匹配。

Anti-CSRF 代幣

要確保我們的API只使用Post Requests執行更改。

GET請求應該只檢索數據。

這些類型的攻擊欺騙用戶點擊鏈接,然后該鏈接使用用戶的活動會話嵌入一個請求表單來更改用戶數據,而不訪問實際的身份驗證代幣。

使用Anti-CSRF代幣可以確保服務器可以驗證客戶端發送的POST請求來自實際的網站。

服務器檢查接收到的代幣是否與最初發送給客戶端的代幣匹配。

可擴展性

JWT教程喜歡談論他們的 Todo List React App需要如何擴展以服務于數百萬活躍用戶。

雖然這是一個合理的問題,也是一個不可思議的未來問題,但將可擴展性置于安全性之上是不好的。

只解決應用程序的即時需求,而可擴展性可能不是其中之一。一臺服務器可以服務成百上千的用戶。

在本文結束時,我不能不提到可擴展性可能成為服務器端會話的一個問題。

如果可擴展性是應用程序的一個關注點,其實不必擔心:我們很快就會修好。

需要注意的是,使用集群會產生額外的成本,但根據工作負載,這些成本不應該太高。一定要使用Redis的AWS計算器來進行估算,并決定服務器端會話對我們的項目來說是否是個好主意。

使我們的有狀態會話處于“無狀態”

如果應用程序不需要在其運行的同一個實例中存儲任何狀態,那么它就是無狀態的。

如果數據庫與應用程序運行在相同的服務器實例中,那么它就不是無狀態的。

但是,如果我們獨立于服務器實例運行數據庫,則服務器是無狀態的,因為它的唯一目的是處理業務邏輯。

存儲數據是數據庫關心的問題。

將會話存儲在基于內存的數據庫中

我們的服務器應該為每一個經過身份驗證的請求要求會話數據。出于這個原因,我們想要優化讀和寫的操作。

使用我們的常規SQL或NoSQL數據庫將非常費力,并可能導致高成本和速度放緩。

使用Redis

Redis是一個內存(鍵,值)對數據庫,允許快速讀寫訪問。

例如,AWS提供Redis集群,確保我們的操作通過自動擴展組保持可擴展性。

最后,讓我們回顧一下使用有狀態會話的工作流程,就像不久前使用JWT時一樣。

用戶輸入他們的用戶名和密碼。

當用戶單擊登錄按鈕時,向服務器發送一個請求,使用數據庫驗證用戶的憑據。

服務器認證用戶成功。

服務器創建一個代幣(UUID),將其映射到用戶的數據庫ID,并將其存儲在Redis中。

服務器將Cookie附加到發送給瀏覽器的HTTP響應上。

客戶端檢查代幣是否有效。

僅僅在標頭中有一個HTTP-Only cookie并不意味著會話是處于活動狀態。

瀏覽器向處理用戶會話數據的服務器端點發送一個GET請求。因為Cookie向服務器提供了這個信息,所以這個請求不需要參數。

前端現在可以在應用程序中存儲會話數據,而無需保留實際的代幣。

客戶端使用存儲在代幣中的信息有條件地渲染

通常,教程使用像用戶的電子郵件,用戶名等字段。這一次,信息通常是最新的,因為客戶每次刷新網站時,信息都會更新。

HTTP-Only Cookie在每次請求時會自動發送

代幣將一直有效到到期。但是,服務器可以根據需要撤銷它。

我們應該知道,沒有什么解決方案是萬全之策,總會有權衡,也沒有一種方法是100%安全的。漏洞總是存在的。但是,我們應該確保為我們的方法提供最好的安全性。

本文介紹了JWT及其作為web認證解決方案的缺點。然后我們找到了一種更好的(安全的)方法來實現我們的web應用程序的認證。

不過,我展示了一個使用有狀態會話的簡單實現。我們可能會想,到期怎么辦?即使是一個星期也可能是一個很長的期限。

刷新代幣

刷新代幣并不是為了讓事情變得簡單,但是這里有一個大概的想法。

我們有兩個代幣:驗證代幣(用于驗證我們的身份)和刷新代幣。

身份驗證代幣可以是短暫的,例如,1-2天。當用戶正在積極地使用他們的會話時,瀏覽器將不斷地檢查,以查看認證代幣是否即將到期。當它檢測到這一點時,它使用具有較長的到期時間的刷新代幣,在前一個認證代幣過期之前請求一個新的身份驗證代幣。

Long-Lived刷新代幣引入了新的問題和復雜性,比如代幣輪換和代幣重用檢查。

如果我們仍然想使用無狀態會話,有些白費力氣

像AWS Cognito或Firebase這樣的庫使用無狀態代幣,并將它們存儲在本地存儲中。

如果我們仍然希望使用無狀態會話,請確保使用經過良好測試的、功能完整的庫來為我們處理安全性。

這些庫使用短期代幣,不斷刷新它們,并提供代幣刷新輪換,以防止安全問題。

Source:https://medium.com/better-programming/stop-using-json-web-代幣s-for-authentication-use-stateful-sessions-instead-c0a803931a5d

Tags:COOKCOOKIEOOKILOCKCOOKIE幣cookie幣種COOKIE價格block幣前景

波場
三分鐘讀懂流動性自動化管理協議 Mero_ERO

撰文:iambabywhale.ethMero 之前名為 Backd,官方于 7 月 26 日宣布將其從 Backd 更名為 Mero.

1900/1/1 0:00:00
a16z近期Web3布局項目_WEB

很少有公司像a16z那樣在加密貨幣融資方面發揮核心作用。在2018年的博客中,a16z就著重提到了Web3的重要性,聲稱該領域提供了一種全新的方式—它結合了Web2時代之前的最佳方面,并認為當時.

1900/1/1 0:00:00
Lido更新路線圖:優化節點質量、降低準入門檻、向著去中心化的質押方案出發_LID

本文為Lido團隊發布的最新路線圖,剛剛宣布加入 Lido 擔任戰略顧問的 Hasu 也參與了此次路線圖更新制定.

1900/1/1 0:00:00
Forart.ai:Create to earn可能成為P2E領域繼STEPN的下?個爆點_BSP

原文標題:《Forart.ai : Create to earn 可能成為 P2E 領域繼 STEPN 的下?個爆點》What is Forart.ai  Forart.

1900/1/1 0:00:00
Reg A+是什么 符合它就可在美國合規發幣嗎丨金色百科_REG

近期,美國區塊鏈項目Blockstack稱他們獲得了美國SEC的批準,發行價值2800萬美元的代幣,是首個符合Reg A+規則的合法STO項目.

1900/1/1 0:00:00
Akord:基于Arweave 網絡的新一代存儲應用_ORD

Akord 最近完成了一輪230萬美元的融資,本輪投資者包括:D1 Ventures、Maven11 Capital、SevenX Ventures 和 Arweave 團隊.

1900/1/1 0:00:00
ads