프로그래밍 개발 시 접근 지정자를 통해 해당 데이터의 접근 권한을 지정할 수 있습니다.
private , protected, public
그중 본 클래스에서만 접근할 수 있는 private 접근 지정을 통해 외부 클래스의 접근을 방지하여 데이터의 안전성을 가져가는 것입니다. 그러나 여기서 한 가지 조심해야할 점이 있습니다.
다른 자료형들은 괜찮으나, overwrite가 가능한 array는 public 메소드를 구현할 시 신중하게 구현해야합니다.
무엇을?
위의 사진은 private char array 형태로 setter,getter를 구현한 것입니다.
그러나 여기서 두 가지 취약점이 존재하게 됩니다.
바로 public getter,setter 메소드를 통해 private array의 주소를 통해 값을 조작할 수 있게됩니다.
때문에 악의적인 외부 레퍼런스를 직접 참조 하게되는 것이죠.
아래의 사진은 외부 입력 값의 레퍼런스를 직접 참조하여 외부 입력값이 변조될 시 private array값도 변경됨을 나타냅니다.
따라서 getter와setter의 직접적인 참조를 방어하며 private 데이터의 변조로 부터 보호 해줘야합니다.
위의 사진과 같은 대응으로 private 접근지정을 유지할 수 있게됩니다.
1. setter에서는 외부 배열의 레퍼런스가 아닌 외부 배열의 값만 복사하여 private을 유지한다.
2. getter에서는 외부로 값을 반환할 시 복사 배열의 주소값을 반환하여 private array의 주소 값을 보호한다.
아래의 사진은 1의 대응을 통해 외부에서 값을 변조하여도 private array의 값은 변조되지 않음을 보여줍니다.
다음의 사진은 외부로 주소 값 반환 시 2의 대응을 통해 복사본의 주소값을 반환시켜 private array의 주소 값이 보호되어 외부에서 값을 변조하여도 private array의 값이 변조되지 않음을 보여줍니다.
'시큐어 코딩' 카테고리의 다른 글
불안정한 약한 암호 알고리즘 사용 (0) | 2020.03.27 |
---|---|
중요정보 키보드 캐시 (0) | 2020.03.22 |
내부저장소를 활용한 민감정보 저장 (0) | 2020.03.13 |
JAVA 메모리 취약성 제거 (0) | 2020.03.11 |
Android 개발 시 보안을 위한 KeyStore (5) | 2020.02.10 |