界: Code Quality

コードの質が低いと、予測できない動作につながります。ユーザーの視点には、それがしばしば使い勝手の悪さとなって現れます。攻撃者にとっては、予期せぬ方法でシステムにストレスを与える機会となります。

Code Correctness: Readonly Collection Reference

Abstract
readonly キーワードにより、変数は宣言した時点またはコンストラクタ内で初期化する必要があり、他の場所では変更できないというルールが強制適用されます。これは値の型に対しては期待どおりに動作しますが、オブジェクトのコンテンツとリストは、private readonly として宣言されている場合にも引き続き変更可能です。
Explanation
private readonly リスト変数を getter-only プロパティから戻すと、呼び出し元のコードはリストのコンテンツを変更でき、実質的にリストに書き込みアクセスを許可するので、private readonly としたプログラマの意図に反します。

例 1: 次のコードには、private readonly として宣言されたリスト _item が含まれます。

class Order
{
private readonly List<string> _item = new List<string>();
public IEnumerable<string> Item { get { return _item; } }

public Order()
{
/*class initialize */
}

/*some important function......*/
}
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 1
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.dotnet.code_correctness_readonly_collection_reference