成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

一行代碼損失了???RMB

Shihira / 3221人閱讀

摘要:下面的代碼就沒有意義了,不需要解釋了。。。合約的問題當然是做加減乘除的時候沒有用邏輯還有一個問題正常來說,應該需要加一個判斷,被授權的金額不能大于要發(fā)送的金額。。??偨Y我發(fā)現(xiàn)了攻擊這個合約的人已經(jīng)攻擊了很多合約了這一些幣大家就別抄底了

背景

又發(fā)現(xiàn)一個ERC20 超級大的漏洞

這個漏洞嚴重到什么情況呢?

你的錢不再是你的錢,任何人都可以把你的錢轉(zhuǎn)走,你也可以轉(zhuǎn)走任何人的錢

那筆操作記錄是 0x9a6a0ba68214db82ec6fd12ee3a6b4cf1143ec963974d7a5edf97e08b6c482ca


下面我來帶大家看看,黑客是如何實現(xiàn)的!

我們可以看到執(zhí)行的方法是 transferFrom

那這個方法是干嘛的呢?(從某個人 轉(zhuǎn)錢到 另外一個人 )

這個方法有一個配套的方法approve,你授權某個人用多少你的錢。。。

所以,這兩個方法的使用場景是,

舉個例子:

我授權我兒子使用我的100塊錢,那我先調(diào)用approve
然后 我兒子要用錢的時候,調(diào)用transferFrom 來用我的錢,當然用一次少一次(而且每次用的錢不能超過我授權的錢)

代碼解釋
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
    /// same as above
    require(_to != 0x0);
    require(balances[_from] >= _value);
    require(balances[_to] + _value > balances[_to]);

    uint previousBalances = balances[_from] + balances[_to];
    balances[_from] -= _value;
    balances[_to] += _value;
    allowed[_from][msg.sender] -= _value;
    Transfer(_from, _to, _value);
    assert(balances[_from] + balances[_to] == previousBalances);

    return true;
}

這個方法會傳入三個參數(shù)

_from :在用誰的錢

_to : 把錢給誰

_value : 準備用多少錢

require(_to != 0x0);
require(balances[_from] >= _value);
require(balances[_to] + _value > balances[_to]);

這三行是一些強制要求

你不能把錢轉(zhuǎn)給0x0,也就是空地址

你在用誰的錢(那么這個人的余額一定要大于 你要用的錢)

你轉(zhuǎn)給的那個人錢,那么那個人的余額一定要大于 之前的余額(也就是不能轉(zhuǎn)個-1之類的,導致他余額反而變少了)

uint previousBalances = balances[_from] + balances[_to];
balances[_from] -= _value;
balances[_to] += _value;

這三行

算出兩個人余額的總數(shù)

from 那個人的余額 - value

to 那個人的余額 + value

allowed[_from][msg.sender] -= _value;

這一行我們分解下
allowed[_from][msg.sender] 是 當前方法調(diào)用的人(msg.sender)可以使用(_from) 多少錢

也就是假如 我授權了我兒子100塊,那么

allowed我的地址 = 100(這邊的msg.sender 需要是我兒子的地址,如果是別人的話,我沒有授權給他,則是0

所以這一行原本的意思是 (我兒子用了多少授權的金額,那么總授權金額需要 減掉 被用掉的)

但是呢。。。因為沒用用safemath...導致任何人都能通過這一行(也就是 0- value)

0-value是不會報錯的(當然如果用safemath的話,是會報錯的。。。)

所以呢,只要你找到一個有錢人的地址,,,然后就可以吧他的錢全部轉(zhuǎn)給任何賬戶。。。

下面的代碼就沒有意義了,不需要解釋了。。。

而且他這個合約 沒有暫停的方法。。。

導致現(xiàn)在任何人都可以調(diào)用這個合約。。。

合約的問題

當然是做加減乘除的時候沒有用safemath

邏輯還有一個問題

正常來說,應該需要加一個 判斷,被授權的金額 不能大于 要發(fā)送的金額。。。

require(allowed[_from][msg.sender] >= _value);

這樣的話 后面也就不會有這些事情了。。。

總結

我發(fā)現(xiàn)了 攻擊這個合約的人 已經(jīng)攻擊了很多合約了!??!

這一些幣大家就別抄底了!

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/24121.html

相關文章

  • 當Kotlin邂逅設計模式之代理模式(二)

    摘要:簡述從這篇文章起,我們將繼續(xù)邂逅設計模式系列篇中的第二篇代理模式。代理模式可以說很多初級中級開發(fā)者迷惑的設計模式。首先我們需要使用類圖直觀地表示出代理模式思想。所以基于代理模式很輕松就實現(xiàn)。簡述: 從這篇文章起,我們將繼續(xù)Kotlin邂逅設計模式系列篇中的第二篇代理模式。代理模式可以說很多初級中級開發(fā)者迷惑的設計模式。但是它確實應用很廣,不用多說大家非常熟悉的Retrofit框架,內(nèi)部使用了...

    番茄西紅柿 評論0 收藏0
  • PHP閉包(Closure)初探

    摘要:實現(xiàn)閉包將匿名函數(shù)在普通函數(shù)中當做參數(shù)傳入,也可以被返回。如果將匿名函數(shù)返回給外界,匿名函數(shù)會保存所引用的變量,而外界則不能得到這些變量,這樣形成閉包這個概念可能會更清晰一些。 原文:http://my.oschina.net/melonol/blog/126694 匿名函數(shù)提到閉包就不得不想起匿名函數(shù),也叫閉包函數(shù)(closures),貌似PHP閉包實現(xiàn)主要就是靠它。聲明一個匿名函數(shù)...

    roadtogeek 評論0 收藏0
  • 手把手教你寫電商爬蟲-第四課 淘寶網(wǎng)商品爬蟲自動JS渲染

    摘要:老規(guī)矩,爬之前首先感謝淘寶公布出這么多有價值的數(shù)據(jù),才讓我們這些爬蟲們有東西可以搜集啊,不過淘寶就不用我來安利了廣大剁手黨相信睡覺的時候都能把網(wǎng)址打出來吧。 系列教程: 手把手教你寫電商爬蟲-第一課 找個軟柿子捏捏 手把手教你寫電商爬蟲-第二課 實戰(zhàn)尚妝網(wǎng)分頁商品采集爬蟲 手把手教你寫電商爬蟲-第三課 實戰(zhàn)尚妝網(wǎng)AJAX請求處理和內(nèi)容提取 都已經(jīng)三節(jié)課了,大家活動活動手腳,咱們開始一場...

    Tecode 評論0 收藏0
  • 手把手教你寫電商爬蟲-第四課 淘寶網(wǎng)商品爬蟲自動JS渲染

    摘要:老規(guī)矩,爬之前首先感謝淘寶公布出這么多有價值的數(shù)據(jù),才讓我們這些爬蟲們有東西可以搜集啊,不過淘寶就不用我來安利了廣大剁手黨相信睡覺的時候都能把網(wǎng)址打出來吧。 系列教程: 手把手教你寫電商爬蟲-第一課 找個軟柿子捏捏 手把手教你寫電商爬蟲-第二課 實戰(zhàn)尚妝網(wǎng)分頁商品采集爬蟲 手把手教你寫電商爬蟲-第三課 實戰(zhàn)尚妝網(wǎng)AJAX請求處理和內(nèi)容提取 都已經(jīng)三節(jié)課了,大家活動活動手腳,咱們開始一場...

    lx1036 評論0 收藏0

發(fā)表評論

0條評論

Shihira

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<