Internal-Transactions
新開發人員 - 我應該將盡可能多的功能預設為私有還是內部?
將盡可能多的功能設為私有或內部是否是一種好習慣?
對於最近的許多黑客攻擊,黑客似乎是通過以意想不到的迂迴方式呼叫函式進入的,開發人員在發布程式碼時並不總是清楚這一點。似乎一個函式可以是私有的或內部的,它會有所幫助。
只要有可能,您應該在程式時始終限制您的範圍。如果您的程式碼的一部分不需要訪問程式碼的另一部分,則不應授予它訪問權限。這通常被稱為
principle of least privilege
.因此,您將函式預設為使用私有/內部修飾符是正確的。
但是,我會提醒你假設你的合約是安全的,因為你限制了誰可以呼叫什麼函式。
如果您在減少餘額之前發送資金或依賴發送控制流的消息,您仍然容易受到攻擊。
預設情況下限制範圍是一種很好的做法,但僅限制範圍並不能防止利用不良操作順序的攻擊或重入攻擊。
始終使您的程序盡可能抽象。如果您不希望合約外部呼叫某個函式,請將其保密。使用修飾符來防止不需要的輸入或函式呼叫。嘗試以所有者身份創建權限並使用 msg.sender 檢查功能。
最好的安全性是合約內沒有接入點。