시큐어 코딩 가이드 · · 2 min read

6. 캅슐화

6.1. 잘못된 세션에 의한 데이터 정보 노출

정의

다중 스레드 환경에서는 싱글톤 객체 필드에 경쟁조건이 발생할 수 있다.

다중 스레드 환경에선 정보를 저장하는 멤버 변수가 포함되지 않도록 하여, 서로 다른 세션에서 데이터를 공유하지 않도록 해야 한다.

안전한 코딩 기법

  • 싱글톤 패턴의 경우, 변수 범위(Scope)에 주의를 기울여야 한다.

6.2. 제거되지 않고 남은 디버그 코드

정의

디버깅 목적으로 삽입된 코드는 개발이 완료되면 제거해야 한다.

디버그 코드는 설정 등의 민감한 정보를 담거나 시스템을 제어하게 허용하는 부분을 담고 있을 수 있다.

남겨진 채로 배포될 경우, 공격자가 식별 과정을 우회하거나 의도하지 않은 정보와 제어 정보가 노출될 수 있다.

안전한 코딩 기법

  • 배포 전, 반드시 디버그 코드를 확인 및 삭제한다.

6.3. Public 메소드로부터 반환된 Private 배열

정의

private으로 선언된 배열을 public으로 선언된 메소드로 반환하면, 그 배열의 레퍼런스가 외부에 공개되어 외부에서 배열 수정과 객체 속성변경이 가능해진다.

안전한 코딩 기법

  • private로 선언된 배열을 public으로 선언된 메소드로 반환하지 않도록 해야 한다.
  • private 배열에 대한 복사본을 반환하도록 한다.
  • 배열의 원소에 대해서는 복사된 원소를 저장하도록 하여 private 선언된 배열과 객체 속성에 대한 의도하지 않게 수정되는 것을 방지한다.
  • 배열의 원소가 String 타입 등과 같이 변경되지 않는 경우에는 Private 배열의 복사본을 만들고 이를 반환하도록 작성한다.

6.4. Private 배열에 Public 데이터 할당

정의

public으로 선언된 메소드의 인자가 private 선언된 배열에 저장되면, private 배열을 외부에서 접근하여 배열수정과 객체 속성변경이 가능해진다.

안전한 코딩 기법

  • public으로 선언된 메서드의 인자를 private 선언된 배열로 저장되지 않도록 한다. 인자로 들어온 배열의 복사본을 생성하고, 복사된 원소를 저장하도록 하여 private 변수에 할당하여 private 선언된 배열과 객체 속성에 대해 의도하지 않게 수정되는 것을 방지한다.
  • 배열 객체의 원소가 String 타입 등과 같이 변경이 되지 않는 경우에는 인자로 들어온 배열의 복사본을 생성하여 할당한다.