https://www.kisa.or.kr/public/laws/laws3.jsp
구현 단계 시큐어코딩 가이드 - 캡슐화 - Private 배열에 Public 데이터 할당
가. 개요
- public으로 선언된 메소드의 인자가 private 선언된 배열에 저장되면, private배열을 외부에서 접근하여 배열 수정과 객체 속성 변경이 가능해진다.
나. 보안대책
- public으로 선언된 메서드의 인자를 private선언된 배열로 저장되지 않도록 한다.
- 인자로 들어온 배열의 복사본을 생성하고 clone() 메소드를 통해 복사된 원소를 저장하도록 하여 private변수에 할당하여 private 선언된 배열과 객체 속성에 대한 의도하지 않게 수정되는 것을 방지한다. 만약 배열 객체의 원소가 String 타입 등과 같이 변경이 되지 않는 경우에는 인자로 들어온 배열의 복사본을 생성하여 할당한다.
다. 코드예제
JAVA
아래의 코드는 멤버 변수 userRoles는 private로 선언되었지만 public으로 선언된 setUserRoles 메소드를 통해 인자가 할당되어 배열의 원소를 외부에서 변경할 수 있다. 이를 통해 의도하지 않은 배열과 원소에 대한 객체속성 수정이 발생할 수 있다.
인자로 들어온 배열의 복사본을 생성하고 clone() 메소드를 통해 복사된 원소를 저장하도록 하여 private변수에 할당하면 private으로 할당된 배열과 원소에 대한 의도하지 않은 수정을 방지 할 수 있다.
아래의 코드는 멤버 변수 userRoles는 private로 선언되었지만 public으로 선언된 setUserRoles 메소드를 통해 인자가 할당되어 배열의 원소를 외부에서 변경할 수 있다. 이를 통해 의도하지 않은 배열에 대한 수정이 발생할 수 있다.
인자로 들어온 배열의 복사본을 생성하여 private변수에 할당하면 private으로 할당된 배열에 대한 의도하지 않은 수정을 방지할 수 있다.
C#
아래의 코드는 멤버 변수 userRoles는 private로 선언되었지만 public으로 선언된 setUserRoles 메소드를 통해 인자가 할당되어 배열의 원소를 외부에서 변경할 수 있다. 이를 통해 의도하지 않은 배열과 원소에 대한 객체 속성 수정이 발생할 수 있다.
객체가 클래스의 private member를 수정하지 않도록 하여야 한다.
참고자료
- CWE-496 Public Data Assigned to Private Array-Typed Field, MITRE,
http://cwe.mitre.org/data/definitions/496.html
'공부 > KISA' 카테고리의 다른 글
취약한 API 사용 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
---|---|
DNS lookup에 의존한 보안결정 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
Public 메소드부터 반환된 Private 배열 - KISA 소프트웨어 개발 보안 가이드 (1) | 2020.07.22 |
시스템 데이터 정보노출 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
제거되지 않고 남은 디버그 코드 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.22 |
댓글