티스토리 뷰
가. 원인
- Private으로 선언된 배열을 Public 메서드로 반환하는 경우
나. 영향
- 외부에서 배열의 데이터를 직접 수정이 가능
다. 보안대책
- private 배열을 반환하지 않는다.
- private 배열을 반환 시 배열의 복제본을 반환하도록 로직을 구현
- private 배열을 수정해야 할 경우 별도의 public 메서드를 생성하여 사용
라. 안전한 코드
1. private 배열의 복제본을 반환
public class MyClass { private String[] colors;
public String[] getMyColor( ) { String[] copyColor = new String[ this.colors.lenght ]; // private 배열의 값을 복사한 별도의 배열을 리턴 for ( int i=0 ; i<this.colors.lenght ; i++ ) copyColor[i] = this.colors[i]; return copyColor; }
|
마. 진단방법
<멤버변수 사용 확인>
1. private 배열을 사용하는지 확인
2. private 배열을 public 메서드로 직접 반환하는지 확인
바. 정/오탐 케이스
<정탐 케이스>
1. Private 배열인 멤버변수를 리턴하여 사용할 경우
2. 일반객체를 갖는 Private 배열을 반복문으로 복사하지만, 일반객체의 원본 주소값이 복사될 경우
( private Color[] myColor; )
<오탐 케이스>
1. final로 선언된 상수를 리턴할 경우
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] API 오용 01 - DNS Lookup에 의존한 보안결정 (0) | 2019.10.07 |
---|---|
[구현보안] 캡슐화 05 - Private 배열에 Public 데이터 할당 (0) | 2019.10.07 |
[구현보안] 캡슐화 03 - 시스템 데이터 정보 노출 (0) | 2019.10.07 |
[구현보안] 캡슐화 02 - 제거되지 않고 남은 디버그 코드 (0) | 2019.10.07 |
[구현보안] 캡슐화 01 - 잘못된 세션에 의한 데이터 정보 노출 (0) | 2019.10.07 |
- Total
- Today
- Yesterday