https://www.kisa.or.kr/public/laws/laws3.jsp
구현 단계 시큐어코딩 가이드 - 캡슐화 - Public 메소드부터 반환된 Private 배열
가. 개요
- private로 선언된 배열을 public으로 선언된 메소드를 통해 반환(return)하면, 그 배열의 레퍼런스가 외부에 공개되어 외부에서 배열 수정과 객체 속성 변경이 가능해진다.
나. 보안대책
- private로 선언된 배열을 public으로 선언된 메소드를 통해 반환하지 않도록 해야 한다.
- private 배열에 대한 복사본을 반환하도록 하고 배열의 원소에 대해서는 clone() 메소드를 통해 복사된 원소를 저장하도록 하여 private 선언된 배열과 객체 속성에 대한 의도하지 않게 수정되는 것을 방지한다. 만약 배열의 원소가 String 타입 등과 같이 변경이 되지 않는 경우에는 Private 배열의 복사본을 만들고 이를 반환하도록 작성한다.
다. 코드예제
JAVA
멤버 변수 colors는 private로 선언되었지만 public으로 선언된 getColors() 메서드를 통해 참조를 얻을 수 있다. 이를 통해 의도하지 않은 수정이 발생할 수 있다.
아래의 코드는 멤버 변수 colors는 private로 선언되었지만 public으로 선언된 getUserColors 메소드를 통해 private 배열에 대한 reference를 얻을 수 있다. 이를 통해 의도하지 않은 수정이 발생할 수 있다.
private배열에 대한 복사본을 만들고, 복사된 배열의 원소로는 clone() 메소드를 통해 private 배열의 원소의 복사본을 만들어 저장하여 반환하도록 작성하면, private선언된 배열과 원소에 대한 의도하지 않은 수정을 방지 할 수 있다.
아래의 코드는 멤버 변수 colors는 private로 선언되었지만, public으로 선언된 getColors() 메소드를 통해 reference를 얻을 수 있다. 이를 통해 의도하지 않은 배열의 수정이 발생할 수 있다.
private배열의 복사본을 만들고, 이를 반환하도록 작성하면, private 선언된 배열에 대한 의도하지 않은 수정을 방지 할 수 있다.
C#
아래의 코드는 멤버 변수 colors는 private로 선언되었지만 public으로 선언된 getUserColors 메소드를 통해 private 배열에 대한 reference를 얻을 수 있다. 이를 통해 의도하지 않은 수정이 발생할 수 있다.
메소드를 private 으로 하거나, 복제본 반환, 수정하는 public 메소드를 별도로 만들어야 한다.
참고자료
- CWE-495 Private Array-Typed Field Returned From A Public Method, MITRE,
http://cwe.mitre.org/data/definitions/495.html - Do not return references to private mutable class members, CERT,
http://www.securecoding.cert.org/confluence/display/java/OBJ05-J.+Do+not+return+references+to+private+mutable+class+members
'공부 > KISA' 카테고리의 다른 글
DNS lookup에 의존한 보안결정 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
---|---|
Private 배열에 Public 데이터 할당 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
시스템 데이터 정보노출 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
제거되지 않고 남은 디버그 코드 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
잘못된 세션에 의한 데이터 정보노출 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
댓글