Reino: Code Quality

Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.

Code Correctness: Readonly Collection Reference

Abstract
La palabra clave de solo lectura hará cumplir la regla que indica que es necesario inicializar la variable tal como está declarada o tal como está en el constructor, y que no se puede modificar en ningún otro lugar. Esto funciona tal como se espera para los tipos de valores; sin embargo, el contenido de los objetos y las listas aún se puede modificar, incluso si se declara como privado y de solo lectura.
Explanation
Devolver una variable de lista private readonly desde una propiedad de solo getter permite que el código de llamada modifique el contenido de la lista, lo cual proporciona a la lista acceso de escritura y contradice las intenciones del programador que la hizo private readonly.

Ejemplo 1: el siguiente código contiene una lista _item declarada como private readonly.

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