Solidity

給定的程式碼片段中是否有任何可重入攻擊?如果是,那麼我該如何解決?

  • March 19, 2019
function withdrawForeignTokens(address _tokenContract) onlyOwner IsAuthenticate public returns (bool) {
       ERC223Interface token = ERC223Interface(_tokenContract);
       return token.transfer(owner,token.balanceOf(address(this)));
   }

在上面的程式碼中 IsAuthenticate 是驗證我目前契約的修飾符。

不,在給定的程式碼中(有點)沒有重入攻擊的可能性。

我說“有點”是因為有重新進入的可能性,但這並不是真正的攻擊。您正在呼叫的另一個合約可能會再次呼叫您的函式(至少如果您沒有進行所有修改器檢查),這會使其重新進入。但是沒有任何好處,因為其他合約已經可以在自己的上下文中執行他們想要的任何程式碼。

不可能知道另一個契約做了什麼。我實際上不知道 ERC223 是什麼,但它確實沒有任何區別——它可以以任何方式實現。

所以底線是你不應該盲目地相信另一個契約。即使它遵循一些標準(ERC223),它也沒有說明它是如何實現的。

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