티스토리 뷰

반응형

 

 

 

가. 원인

  - 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로 선언된 상수를 리턴할 경우

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday