계: Code Quality
코드 품질이 낮으면 예측할 수 없는 동작이 발생합니다. 사용자 입장에서는 사용 편의성이 떨어지는 것으로 나타나는 경우가 많습니다. 공격자에게는 예상치 못한 방법으로 시스템에 부담을 줄 수 있는 기회가 됩니다.
Code Correctness: Readonly Collection Reference
Abstract
읽기 전용 키워드에 변수를 선언한 대로 또는 구성자에서 초기화해야 하고 다른 위치에서 수정할 수 없다는 규칙이 적용됩니다. 이는 값 유형에 대해 예상한 대로 작동하지만 개체 및 목록의 콘텐트는 개인 정보 읽기 전용으로 선언한 경우에도 수정할 수 있습니다.
Explanation
getter 전용 속성에서
예제 1: 다음 코드에는
private readonly
목록 변수를 반환하면 호출 코드가 목록의 콘텐트를 수정할 수 있기 때문에 사실상 목록 쓰기 액세스 권한을 부여하게 되어 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 - Common Weakness Enumeration CWE ID 398
desc.structural.dotnet.code_correctness_readonly_collection_reference