题目
下面的登录消息是同事提交的实现:
请签名登录我们的平台
地址: 0x1234...
时间: 2026-09-27 10:00
请指出这段消息缺少哪些必要字段、会带来哪些具体风险,并说明钱包侧在展示这类请求时应当做哪些校验。
考察目标
- 是否知道登录消息的必填字段集合。
- 能否指出缺失字段分别对应哪类攻击。
- 是否了解钱包侧的域名校验要求。
考察登录消息的必填字段、随机数要求与钱包侧域名校验,定位重放与钓鱼风险。
下面的登录消息是同事提交的实现:
请签名登录我们的平台
地址: 0x1234...
时间: 2026-09-27 10:00
请指出这段消息缺少哪些必要字段、会带来哪些具体风险,并说明钱包侧在展示这类请求时应当做哪些校验。
这段消息缺少 domain 与 uri、nonce、version、chain-id:域名与来源绑定用于阻止跨站重放,nonce 用于阻止签名被截获后重复建立会话,chain-id 决定会话所属链;issued-at 需要是 RFC 3339 日期时间。钱包侧按规范比对来源与消息中的 scheme、domain。
domain、address、uri、version、chain-id、nonce、issued-at;scheme、statement、expiration-time、not-before、request-id、resources 为可选(依据:EIP-4361 §Specification 的 Message Fields)。nonce 至少 8 位字母数字;issued-at 与 expiration-time 使用 RFC 3339 日期时间(依据:EIP-4361 §Specification 的 Message Fields)。chain-id 指定会话绑定的链,合约账户需要在该链上解析(依据:EIP-4361 §Specification 的 Message Fields)。scheme、domain 防止钓鱼,来源取自浏览器窗口或钱包连接会话这类可信数据源(依据:EIP-4361 §Specification 的 Wallet Implementer Steps 的 Verifying the Request Origin)。0x45 的 personal_sign 格式(依据:EIP-4361 §Specification 的 Signing and Verifying Messages with Ethereum Accounts;EIP-191 §Specification 的 Version 0x45)。resources 内容变化或 ERC-1271 实现与依赖数据变化时,服务端宜使相关会话失效(依据:EIP-4361 §Security Considerations 的 Session Invalidation)。nonce 由服务端生成并一次性使用,固定值会削弱防重放(依据:工程经验,无规范依据)。expiration-time,并把过期、随机数已用、域名不匹配映射为可区分的失败提示(依据:工程经验,无规范依据)。domain、uri、nonce 等属于必填字段;依据:EIP-4361 §Specification 的 Message Fields)。issued-at 使用 RFC 3339 日期时间;依据:EIP-4361 §Specification 的 Message Fields)。发现这道题有问题? 反馈此题