严重getToken函数随意印币漏洞 :任何人可给自己的账号虚增余额

AMORCOIN Token合约被发现存在严重安全漏洞,任何人都能通过getToken函数增加自己的Token余额,未设置调用权限且不影响totalSupply,已引发安比(SECBIT)实验室和派盾(PeckShield)警告。建议项目方立即修复,用户提高警惕。

在最近一次漏洞监控扫描中,安比(SECBIT)实验室风险监控平台发出预警,AMORCOIN (AMR) Token 合约存在致命漏洞,任何人都可以随意增加其账户上的 Token 余额。

合约地址:0x14fb4c93fe461ec3f9f22b61ab7030f258867969

安比(SECBIT)实验室小伙伴分析合约源码后发现,该合约中存在一个函数 getToken(),该函数的作用是给调用者的账户余额增加数量为 value 的 Token,value 值由调用者传入。通常合约中增发 Token 的函数仅 owner 可以调用,但是不幸的是,该合约中 getToken() 函数并未设置调用权限,并且该方法未标明可见性,默认为 public,也就是说,任何人都可以通过调用这个函数来任意增加自己账户上的 Token。

另外,通过这个函数增发 Token 后并没有修改 totalSupply 的值,间接导致了所有账户余额总和与合约标明的总量不一致,就是说totalSupply 的值并非 Token 的真实总量。

这里写图片描述

目前该项目处于公募阶段。根据 etherscan 显示,AMORCOIN (AMR) Token 交易量总计 306 笔,其最近一次交易在不到一天前,为交易较为活跃的合约。

这里写图片描述

安比(SECBIT)实验室已于第一时间向项目方发出预警提示。据悉,派盾(PeckShield)团队也独立发现了该问题。另外安比(SECBIT)实验室风险监控平台显示,存在同样问题的合约还有两个。

<
<think>好的,我现在需要解决用户关于SQL中gettoken函数的问题。用户想了解这个函数的定义、实现、用法和示例。首先,我需要确认是否存在原生的SQLgettoken函数。根据我的知识,标准SQL中没有内置的gettoken函数,这可能是用户所在系统或框架中的自定义函数。接下来,我需要查看用户提供的引用内容,寻找相关线索。引用3和4提到了与Token生成和验证相关的Java代码,特别是TokenController类和幂等性测试接口。这里有一个generateToken方法,可能对应到用户所说的gettoken函数。引用4还解释了幂等性的实现方式,涉及生成Token并存储到Redis中。因此,用户提到的gettoken函数很可能是指这个自定义的generateToken方法,用于生成唯一的Token字符串,确保接口的幂等性。需要向用户说明这是特定于他们系统的实现,并非标准SQL函数。然后,根据引用中的代码,详细解释该函数的定义、实现逻辑、用法以及可能的示例。同时,要注意用户可能混淆了SQL函数和应用程序中的方法,需要澄清两者区别,并确保回答结构清晰,分点说明定义、实现、用法和示例,帮助用户逐步理解。</think>根据引用内容分析,SQL中并没有原生的`gettoken`函数,但您提到的可能是与接口幂等性相关的Token生成方法。以下是基于引用[3][4]的解析: ### 一、getToken函数定义 1. **功能定义**:用于生成全局唯一Token字符串,支持接口幂等性验证 2. **核心参数**:用户标识(如用户ID、设备ID等) 3. **输出格式**:UUID格式字符串,如`d58d7f97-a9d4-4a8f-8e32-15b6d7e3e5c0` ### 二、Java实现示例(引用[3]) ```java // Token生成服务接口 public interface TokenUtilService { String generateToken(String userInfo); } // Redis实现类 @Service public class TokenServiceImpl implements TokenUtilService { @Autowired private RedisTemplate<String, String> redisTemplate; public String generateToken(String userInfo) { // 生成UUID作为Token String token = UUID.randomUUID().toString(); // 存储到Redis并设置过期时间(示例30分钟) redisTemplate.opsForValue().set(token, userInfo, 30, TimeUnit.MINUTES); return token; } } ``` ### 三、SQL相关用法场景 虽然不直接操作数据库,但在SQL系统中可能涉及: ```sql -- 创建Token存储表(引用[4]设计思想) CREATE TABLE api_tokens ( token VARCHAR(36) PRIMARY KEY, user_info VARCHAR(255), created_at DATETIME DEFAULT CURRENT_TIMESTAMP, expires_at DATETIME ); -- Token验证查询(伪代码示例) SELECT user_info FROM api_tokens WHERE token = 'd58d7f97-a9d4-4a8f-8e32-15b6d7e3e5c0' AND expires_at > NOW(); ``` ### 四、幂等性验证流程 1. 客户端请求`/token`接口获取Token 2. 执行SQL操作时携带Token(建议放在Header) 3. 服务端验证流程: ```java boolean validToken(String token, String userInfo) { // Redis验证(引用[3]实现) String storedUser = redisTemplate.opsForValue().get(token); if (storedUser != null && storedUser.equals(userInfo)) { redisTemplate.delete(token); return true; } return false; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值