我附上了一张与刀攻击有关的图片。我从下面的链接虚空系统安全综述:漏洞、攻击与防御获得了图像

。该图像显示了包含“抛出”的代码。我对掷球很困惑,因为它会导致倒转。DOA的攻击用了‘扔’吗?有些人请指点我被扔在刀攻击中,为什么它没有引起所有交易的逆转(和退款)?
发布于 2020-01-23 23:42:39
不是的。
如果我正确地理解了这个图,它只是简单地显示合同,检查msg.sender.call.value(reward)结果,以确保它有效,如果传输被拒绝,它打算抛出,这是正确的做法。
它没有失败。它调用了攻击者(成功),这使攻击者有机会考虑重新输入。攻击者需要观察剩余的气体,以确保它不会从循环中耗尽,否则所有的东西都会松开。
当它决定停止重新输入并返回时,线程将从Y路径中删除,并从balances[msg.sender]中减去。这没有底流保护,所以该语句,如图所示,不会失败。在最坏的情况下,msg.sender最终会有一个巨大的平衡,这将是一个更多的恶作剧的开端。
在此之后,就不会有通向throw的路径了,尽管图表可能会让它看起来很像。“缺少”箭头不是疏忽。如果他们添加了一个"end“块,可能会更清楚。
希望能帮上忙。
https://ethereum.stackexchange.com/questions/79282
复制相似问题