钱包登录时弹出的签名请求,是一串结构化文本,不是一笔链上交易。它的作用是让你用自己的私钥"盖个章",向网站证明"我控制这个地址"。签名本身不转移资产,也不消耗 Gas。但问题恰恰出在这里:很多人看到"签名"两个字就习惯性点确认,而钓鱼网站正是利用这一点,让你签下一段看起来像登录、实际上授权转走资产的请求。
SIWE 消息里有哪些字段,各自管什么
SIWE(Sign-In with Ethereum,即 EIP-4361)定义了一套标准格式,钱包会按这套格式把待签内容解析成人类可读的界面。你需要在签名前核对的,主要是这几个字段:
domain(域名)。这是 SIWE 防钓鱼的核心机制。规范要求钱包必须将消息中的 domain 与请求实际来源的域名进行比对。比如你在 app.uniswap.org 上点击登录,消息开头应该是 app.uniswap.org wants you to sign in with your Ethereum account:。如果域名对不上,说明这个签名请求可能不是来自你正在访问的网站。
address(地址)。确认这是你当前正在使用的钱包地址。如果你连接了多个地址,确保签名的是你打算用来登录的那个。
statement(声明)。这是一段人类可读的说明文字,通常写"I accept the Terms of Service"之类的内容。它的作用是让用户理解这次签名的目的。如果这段文字写了奇怪的内容,比如"授权转移所有资产",需要停下来判断。
nonce(随机数)。每次登录请求应包含一个唯一的随机数,防止签名被重放。如果一个网站反复使用同一个 nonce,或者根本没有 nonce 字段,说明它可能没有正确实现 SIWE。
issued-at 和 expiration-time。签名的签发时间和过期时间。过期的消息不应该被接受。
怎么判断一个签名请求是安全的
MetaMask 在支持 SIWE 后,会对消息做两件事:解析字段并展示给用户,以及检查域名绑定。但钱包不会替你拦住所有风险。
先看域名是否一致。MetaMask 会在域名不匹配时显示警告,但不会强制阻止你继续签名。这意味着如果你忽略警告硬点确认,签名依然会完成。钓鱼网站完全可以生成一条 domain 字段写着自己网站域名的消息,让你在不知情的情况下为一个陌生域名签名。所以核对域名这一步需要你自己做:你访问的是哪个网站,消息里的 domain 是否就是它。
再看消息类型。SIWE 消息的格式有固定特征:开头通常是域名加"wants you to sign in with your Ethereum account:",然后是地址、声明、nonce、时间戳等结构化字段。如果弹出的内容是一大段 JSON、一串十六进制码、或者看起来像在请求"授权""转账""Permit"操作,那就不是 SIWE 登录,需要按交易或授权请求来对待。
检查是否有异常紧迫性。正常的登录签名不会要求你在几秒内完成,也不会威胁"不签名就冻结账户"。如果页面有倒计时、反复催促,需要先退出来确认网站真伪。
钓鱼 SIWE 请求可能长什么样
最直接的一种攻击方式是伪造域名。攻击者注册一个和正规网站极其相似的域名,比如把 metamask.io 写成带 Unicode 变体字符的仿冒域名。在这个假网站上,SIWE 消息的 domain 字段写的是假域名,但用户如果没有仔细看,可能以为自己在正规网站登录。
另一种方式是利用用户对签名机制的不理解。有些钓鱼网站不伪造域名,而是用正规域名让你签名,但消息的 statement 或附加字段里嵌入了恶意内容。EIP-4361 的 resources 字段可以用来指定签名所涉及的资源,如果钱包没有正确展示这个字段,用户可能不知道签名实际授权了什么。
还有一种情况是,攻击者通过 XSS(跨站脚本)或恶意库篡改正规网站上的签名请求。如果某个 dapp 的 SIWE 实现存在漏洞,攻击者可能在其他用户访问时注入自己控制的签名请求。
如果你已经签了一个可疑的请求
签名本身不会立即转走资产。如果你怀疑签了一个不安全的 SIWE 消息,需要判断它到底签了什么。
如果签的确实只是一个符合 SIWE 格式的登录消息,且 domain 是你信任的网站,没有包含授权转移资产的字段,那么这次签名的实际风险很低——攻击者拿到的只是一个"证明你控制该地址"的签名,无法直接动用资产。
如果签的内容不是标准 SIWE,而是一个交易、授权(approve)或 Permit 签名,情况不同。Permit 签名可以让攻击者在不发起链上交易的情况下转走特定代币;approve 签名则授予某个合约操作你代币的权限。这两种签名一旦被恶意利用,资产可能在你不操作的情况下被转走。
此时可以做的是:打开钱包的"已连接的网站"或授权管理页面,撤销不再需要的授权;如果怀疑私钥或助记词已经泄露(比如在钓鱼网站输入过),把资产转移到新钱包。
一个实用的检查习惯
签名前花几秒看两处:消息里的域名和你浏览器地址栏的域名是否一致;消息的格式是否是你熟悉的登录样式,而不是一串看不懂的哈希或 JSON。MetaMask 和其他支持 SIWE 的钱包已经把标准格式的消息做成了相对友好的界面,如果弹出的内容看起来和平时登录不一样,先取消再说。
参考资料
- MetaMask·MetaMask Developer 與 SpruceID 合作實作 EIP-4361,页面发布或更新日期:2024-03-27;核查日期:2026-09-27。
- eips.sh·ERC-4361: Sign-In with Ethereum,页面发布或更新日期:2021-10-10;核查日期:2026-09-27。
- Ethereum EIPs·eip-4361.md,页面未标明更新日期;核查日期:2026-09-27。
- Ethereum EIPs·eip-4361.md,页面未标明更新日期;核查日期:2026-09-27。
- Ethereum EIPs·eip-4361.md,页面未标明更新日期;核查日期:2026-09-27。
- Sign-In with Ethereum·Security Considerations,页面未标明更新日期;核查日期:2026-09-27。
- Coinbase Developer Documentation·Sign In With Ethereum,页面发布或更新日期:2026-09-17;核查日期:2026-09-27。
- MetaMask Docs·Use Sign-In with Ethereum,页面未标明更新日期;核查日期:2026-09-27。
- PhishDestroy·xn--metamasklogin-lobs.webflow.io: Fake MetaMask Login Crypto,页面发布或更新日期:2026-06-12;核查日期:2026-09-27。
- Internet Computer Developer Forum·Security Advisory: Sign-In with Ethereum/Bitcoin/Solana (SIWE/B/S) prone to Phishing,页面发布或更新日期:2026-02-10;核查日期:2026-09-27。



