您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何保證以太坊DApp本地存儲localStorage的安全性,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
部署去中心化應用程序dapp會引入一些有趣的安全性考慮因素,這些因素可能不會出現在更傳統的開發中。我們如何保證dApp本地存儲的安全性?
提出這個問題的原因是我們在使用Colony dApp時遇到的一個重要障礙,那就是如何應對在使用IPFS或Swarm等分布式存儲系統保持本地存儲的dApp數據安全挑戰。
我將從dApp開發人員的角度來看一下這個問題,然后研究一些可能的解決方案。
IPFS運行本地節點node
,它與Web服務器捆綁在一起。捆綁的Web服務器使節點可以輕松地相互連接并共享網絡中其他位置可能需要的數據。
作為一個去中心化的應用程序構建器,你將依賴該Web服務器將你的內容從一個節點推送到另一個節點,從而使其可以根據需要立即供最終用戶使用。
假設你正在完全去中心化full decentralized
并且正在避免使用DNS或Web代理等任何內容來跟蹤你的內容在網絡上的位置,那么訪問dApp的方式通常是通過瀏覽器使用其查詢本地節點哈希,如:
http://localhost:8080/QmcefGgoVLMEPyVKZU48XB91T3zmtpLowbMK6TBM1q4Dw/
現在,假設在正常使用期間,你的應用程序將在瀏覽器的localStorage保存數據:可能需要傳遞一些數據,或者保持本地用戶交互的隊列,以最大限度地減少鏈上交易并節省gas成本。
瀏覽器中的本地存儲僅限于特定的地址上下文(域和端口)。IPFS節點是獲取此上下文的,這意味著通過IPFS Web服務器運行的任何去中心化應用程序將使用具有讀寫訪問權限的相同localStorage
。
這可能是一個大問題。
默認情況下,dApp的某些helper依賴項使用localStorage臨時將密鑰保存在純文本中。這些數據不應該被看到的一天。
另一個潛在的泄漏問題是保存其內存狀態的軟件包,以便以后可以恢復。類似Flux-like的庫通常(相對)安全,因為它們只在內存中運行,但啟用持久性狀態會將該內存狀態放入localStorage,從而將其打開給潛在的攻擊者。
不幸的是,安全沒有靈丹妙藥:作為一名dApp開發人員,為安全起見所做的任何調整都可能需要在開發的其他方面做出一些讓步。
以下是你可以做出的一些妥協:
這當然是最安全的方法,但它有點像燒毀你的房子來擺脫蟑螂。在本地存儲數據的dApp中有許多功能和基本行為,刪除太多后可能沒有應用程序存在的意義了。
此外,有許多庫默認使用localStorage
,你必須手動檢查每個依賴項并刪除任何需要它的庫,否則就得自己修改庫。
加密一切這在理論上更有前途,特別是因為大多數dApp開發人員已經在看板上保持默認加密。
實際上,加密所有本地存儲有點麻煩。要加密數據,必須有一個密鑰:但是用戶不能將該密鑰存儲在dApp中,因為它將被放在localStorage,這樣做你就將回到原點。
一種解決方案是使用錢包:你的dApp可能會以某種方式與區塊鏈進行交互,要求用戶解鎖其錢包以發送和簽署交易。由于無論如何都需要錢包與dApp交互,因此可以使用每個帳戶的私鑰privatekey
來加密本地存儲。
然而,這也有一些缺點:
每次想要與localStorage
交互時,您都必須詢問用戶的純文本私鑰。
像MetaMask這樣的密鑰管理軟件不起作用,因為它永遠不會暴露用戶的私鑰。
Mist是作為dApp和以太坊瀏覽器構建的,因此它為該問題提供了一些特殊優勢。
默認情況下,Mist支持Swarm的bzz協議,因此你可以設置一個ens地址指向dApp的哈希值,然后使用Mist無需擔心地瀏覽你的dApp。
不幸的是,這只會解決通過Mist訪問dApp的用戶的問題。
運行本地Swarm節點的用戶仍然必須通過localhost
訪問,localhost
仍然(可能)將數據泄露給其他dApp。
通過瀏覽器擴展程序運行你的應用程序將導致它獲得單獨的上下文(它將不再在localhost:8080),但它有點減弱了去中心化應用程序的目的,必須要依賴于像Chrome網絡商店這樣的中央權威機構用于管理和分配。
此外,現在你必須為要支持的每個瀏覽器創建和維護單獨的擴展,并通過其自己的特定集中式應用商店進行更新。不爽。
和以前一樣,創建獨立應用程序是將dApp分離到自己的上下文的一種方式,這意味著它將獲得自己的包裝器(在本例中為electron)。
獨立的桌面應用程序具有額外的好處,可以捆綁外部庫和你可能需要的任何其他內容,包括IPFS本身的單獨實例。
和以前說的一樣,要有一些讓步:
除非你想要專門在bittorrent上分發應用程序,否則你需要找到一個集中托管的解決方案來進行分發和維護。
你必須為electron桌面應用程序維護一個單獨的存儲庫。
如果你想將IPFS用于任何其他服務,你可能最終會在同一臺計算機上運行多個節點,這可能會變得混亂。
通過使用其他Web服務器代理本地節點,有兩個優點:
首先,現在你的dApp有一個友好的友好的人類可讀地址,而不是一個冗長的哈希。其次,你的應用程序將擁有自己的上下文,并且不會共享localStorage。
然而,代理確實跨越了“真正的”去中心化,用戶將再次不得不依靠中央服務器來訪問去中心化的服務。哎。
對于去中心化的應用程序開發人員來說,現在還處于早期階段。這種問題在新興的“去中心化協議棧”中無處不在“:而且在我們提出更優雅的解決方案之前可能還需要一段時間。
將來,在瀏覽器中支持本機IPFS或Swarm節點可以解決這個問題,并且無需將Web服務器與去中心化的文件存儲捆綁在一起。用戶可以輸入類似ipfs://QmcefGgoVLMEPyVKZU48XB91T3zmtpLowbMK6TBM1q4Dw/
并直接訪問dApp,并為每個唯一的哈希分配自己的上下文。
關于如何保證以太坊DApp本地存儲localStorage的安全性就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。