界: Code Quality

程式碼品質不佳,會導致無法預料的行為。從使用者的角度來看,這通常表現為可用性不佳。對於攻擊者而言,這提供了以意想不到的方式向系統施加壓力的機會。

Solidity Bad Practices: Missing Constructor

Abstract
合約未宣告建構函數。
Explanation
當使用 0.5.0 之前的 Solidity 編譯器版本時,開發人員可以透過建立一個函數並命名為與所包含之合約相同的名稱,來定義建構函數。一般來說,建構函數預留給敏感功能使用,並且僅在合約建立時才執行。如果建構函數存在拼字錯誤,導致名稱與合約名稱不符,則建構函數中的敏感功能就會暴露。

範例 1:以下程式碼使用早於 0.5.0 的 Solidity 編譯器版本,並嘗試宣告一個名稱與合約名稱不完全相符的建構函數。在此範例中,合約名稱與建構函數名稱的大小寫不符 (Missingmissing)。


pragma solidity 0.4.20;

contract Missing {
address private owner;
function missing() public {
owner = msg.sender;
}
}
References
[1] Enterprise Ethereum Alliance Declare Explicit Constructors
[2] Standards Mapping - CIS Azure Kubernetes Service Benchmark 2
[3] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 2
[4] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 3
[5] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[6] Standards Mapping - Common Weakness Enumeration CWE ID 665
[7] Standards Mapping - Smart Contract Weakness Classification SWC-118
desc.structural.solidity.swc118