如何避免Defi合约授权盗U

Technical Blog1years go (2023)更新 Dexnav
0

如何避免DefiContractsAuthorization盗U

咨询合约授权方面的问题:DexDao
DeFi合约授权的原理是基于智能合约编程的,这些合约允许用户授权应用程序访问其数字资产。智能合约是由程序员编写的一系列代码,它们在区块链上执行,并根据预先设定的规则自动处理特定的任务。

在DeFi中,合约授权通过使用“approve”函数实现。该函数允许用户授权特定的应用程序访问其数字资产。在使用此功能时,用户需要指定要授权的代币的数量和要授权给的应用程序的地址。一旦用户进行了授权,应用程序就可以自由地访问用户的数字资产。

虽然合约授权在DeFi中具有重要作用,但它也存在一些Risks。其中最大的风险是“授权盗U”攻击。这种攻击的主要原理是,攻击者通过欺骗用户来获取他们的授权,然后将受害者的数字资产转移到自己的地址。攻击者可以通过发送钓鱼邮件、假冒应用程序或利用漏洞等方式实现此目的。

为了保护自己免受授权盗U攻击的影响,用户应该仔细审查授权请求,确保只授权给可信任的应用程序。此外,他们还可以使用一些工具来监视和管理其数字资产的授权,如Token Allowance Inspector和DeFi Saver等。

如何避免Defi合约授权盗U

钓鱼二维码的原理是利用合约的approve形式,通过请求授权实现远程Transfer付款。骗子会发送一个请求Approval转账的二维码,如果你点了接收,就会授权将自己的USDTWallets授权给攻击者的地址,攻击者便可以转走你的USDT,这种手法被称为“approve钓鱼”。此外,火币钱包也存在漏洞,骗子会通过发送空投山寨币并引导用户在指定站点兑换,然后将用户的资金盗走。这些骗局展现出了目前区块链领域中认知和技术上的严重分化,我们需要加强Security意识和掌握相关知识来保护自己的财产。

诈骗分子们正在使用各种手段来盗取数字货币。其中一种被称为“钓鱼二维码”,其原理是利用钱包授权合约漏洞,实现远程转账付款。一旦用户点击接收,授权就会成功,并将用户的USDT钱包授权给攻击者的地址,使攻击者能够转移用户的USDT。这种手法也被称为“approve钓鱼”。

这种骗局经常出现在一些钱包上,例如Token钱包、火币钱包和IM钱包。通过扫描二维码,用户会被要求进行授权,一旦授权成功,攻击者便可以获得用户的钱包转账权限,从而将用户的USDT转走。

上图可以看到授权数量为:无限制,一旦授权账上的所有资金会在10秒内转移出去。所以大家在转账的时候一定要看清楚是不是申请授权,如果是授权,就看授权数量。尽量不要给任何产品做授权,这样能保护自己的加密资产的安全。

这种骗局的技术基础是以太坊智能合约漏洞,它可以编写一套远程调用钱包程序的代码,类似于早期的灰鸽子软件。攻击者只需要获得权限,就可以远程控制用户的钱包。

下面是一个合约授权代码的示例:

pragma solidity ^0.8.0;

contract MyContract {
  mapping (address => uint256) public balances;

  function approve(address _spender, uint256 _value) public returns (bool success) {
    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }

  function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);
    balances[_from] -= _value;
    balances[_to] += _value;
    allowed[_from][msg.sender] -= _value;
    emit Transfer(_from, _to, _value);
    return true;
  }
}

在这个示例代码中,approve 函数被用来授权某个地址( _spender)可以代表发送者( msg.sender)转移一定数量的代币。在授权成功之后,这个地址就可以使用 transferFrom 函数来转移代币。

transferFrom 函数会检查发送者是否被授权,如果没有授权或者授权的数量不足,就会抛出异常。如果授权成功,就会转移指定数量的代币。

© 版权声明

Related posts

No comments

No comments...