文章预览
描述: Solidity 将合约中定义的变量存储在槽位中。每个槽位可以容纳最多32字节或256位。考虑到所有链上存储的数据,无论是公开还是私有的,都可以被读取,因此可以通过预测私有数据所在的内存槽位来从 Vault 合约中读取私有数据。 如果 Vault 合约在生产环境中被使用,攻击者可以采用类似的技术来访问敏感信息,例如用户密码。 缓解措施: 避免在链上存储敏感数据。 Vault 合约: contract Vault { // slot 0 uint256 private password; constructor (uint256 _password) { password = _password; // 定义一个 User 类型的内存变量,初始化 id 为 0,password 为 _password 的 bytes32 形式 User memory user = User({ id : 0 , password : bytes32(_password)}); users.push(user); idToUser[ 0 ] = user; } struct
………………………………