# 私有数据爆漏问题

By [web3zoom](https://paragraph.com/@web3zoom) · 2025-11-15

---

描述：

以太坊智能合约代码、存储状态以及交易等链上数据都是公开的，合约中即使private变量，也是链上可见的。因此不能将任何未加密的私有数据直接存储在合约状态当中。

漏洞合约：

    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.30;
    
    contract PrivatePassword{
        address private owner;
        string private password;
    
        modifier onlyOwner(){
            require(msg.sender == owner);
            _;
        }
    
        constructor(){
            owner = msg.sender;
        }
    
        function setPassword(string memory newPassword) external onlyOwner{
            password = newPassword;
        }
    
        function getPassword() external onlyOwner view returns(string memory){
            return password;
        }
    }
    

将密码设置在链上的状态变量中是不可取的。

防范措施：

*   避免在合约中存储隐私数据，链上数据无隐私
    
*   采用加密机制
    
    *   用Commit-Reveal机制，如先提交哈希值，再公开秘密数据
        
    *   采用零知识证明，在保持数据机密性的同时验证交易或

---

*Originally published on [web3zoom](https://paragraph.com/@web3zoom/KV6UVcvqMpoci751JnlB)*
