Go-Ethereum

獨家使用 MetaMask 的帳戶作為登錄過程的安全性

  • July 1, 2020

我目前正在 vue.js/node.js 中開發一個 Dapp,它將使用 MetaMask 與乙太坊網路進行互動。我在 JavaScript 模組中實現了以下程式碼。

import web3 from 'web3';
const web3Cont = () => new Promise((resolve) => {
 window.addEventListener('load', () => {
 let currentWeb3;

 if (window.ethereum) {
  currentWeb3 = new web3(window.ethereum);
   try {
    window.ethereum.enable();
     resolve(currentWeb3);
   } catch (error) {
   alert('Please allow access for the app to work');
   }
   } else if (window.web3) {
    window.web3 = new web3(web3.currentProvider);
    resolve(currentWeb3);
   } else {
    alert('You will need MetaMask to use this Site.');
   }   
 });
});
export {web3Cont};

我還在 vue.js 組件中部署了以下內容:

mounted () {
 web3Cont().then((res) => {
   this.web3 = res
  if (this.web3.utils) {
  }
  this.contractInstance = new this.web3.eth.Contract(contractAbi, contractAddress)
  this.web3.eth.getAccounts().then((accounts) => {
  [this.account] = accounts
  ...
})

我沒有實現任何登錄或任何 cookie 功能,並且完全依賴登錄到 MetaMask 的帳戶(由上面的目前 Provider 獲得)來辨識使用者。這種策略安全嗎?有人能以某種方式劫持會話並使用被劫持的會話和目前登錄的 MetaMask 帳戶觸發乙太坊網路上的交易嗎?

謝謝你。Ĵ

這取決於您如何處理這些資訊。

  • 乙太坊網路上的所有資訊都是公開的。
  • 除非使用私鑰簽名,否則來自客戶端的任何資訊都不能被信任
  • 如果您使用它來針對私有伺服器端數據庫進行身份驗證,則它是不安全的
  • 所有交易均由錢包簽名,然後在乙太坊網路上進行身份驗證,因此不存在針對非託管區塊鏈活動的安全風險

引用自:https://ethereum.stackexchange.com/questions/84700