使用标准十进制表示法(1000000)进行签名测试。钱包通常对这种格式显示标准安全警告。
以太坊网络: 主网
账户地址:
// JavaScript中的数字格式等价性
// 以下都表示相同的值(1000000):
console.log(1000000 === 0b11110100001001000000); // true (二进制)
console.log(1000000 === 0xF4240); // true (十六进制)
console.log(1000000 === 0o3641100); // true (八进制)
// 然而,钱包可能基于字符串模式匹配而非归一化数值进行安全检查,
// 这会导致安全漏洞。
// 钱包安全过滤器检查大数值的简单示例:
function naiveSecurityCheck(value) {
// 这可能只检查类似 /^\d{7,}$/ 的模式来检测大数值
// 但会遗漏其他格式的等效值
return /^\d{7,}$/.test(value.toString());
}
console.log(naiveSecurityCheck(1000000)); // true (会触发警告)
console.log(naiveSecurityCheck(0xF4240)); // false (可能绕过警告)