본문 바로가기
공부/KISA

Public 메소드부터 반환된 Private 배열 - KISA 소프트웨어 개발 보안 가이드

by Skogkatt의 개인 블로그 2020. 7. 22.
반응형

https://www.kisa.or.kr/public/laws/laws3.jsp

 

기술안내서 가이드 < 관련법령·기술안내서 < 자료실 : 한국인터넷진흥원

기술안내서 가이드 한국인터넷진흥원 기술안내서 가이드 입니다. 게시판 목록 보기 기술안내서 가이드 표 대분류 소분류 기술안내서 가이드 대상 수준 인터넷 진흥 및 이용 활성화 인터넷 진흥

www.kisa.or.kr

구현 단계 시큐어코딩 가이드 - 캡슐화 - Public 메소드부터 반환된 Private 배열

가. 개요

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

나. 보안대책

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

다. 코드예제

JAVA
더보기

멤버 변수 colors는 private로 선언되었지만 public으로 선언된 getColors() 메서드를 통해 참조를 얻을 수 있다. 이를 통해 의도하지 않은 수정이 발생할 수 있다.

아래의 코드는 멤버 변수 colors는 private로 선언되었지만 public으로 선언된 getUserColors 메소드를 통해 private 배열에 대한 reference를 얻을 수 있다. 이를 통해 의도하지 않은 수정이 발생할 수 있다.

private배열에 대한 복사본을 만들고, 복사된 배열의 원소로는 clone() 메소드를 통해 private 배열의 원소의 복사본을 만들어 저장하여 반환하도록 작성하면, private선언된 배열과 원소에 대한 의도하지 않은 수정을 방지 할 수 있다.

아래의 코드는 멤버 변수 colors는 private로 선언되었지만, public으로 선언된 getColors() 메소드를 통해 reference를 얻을 수 있다. 이를 통해 의도하지 않은 배열의 수정이 발생할 수 있다.

private배열의 복사본을 만들고, 이를 반환하도록 작성하면, private 선언된 배열에 대한 의도하지 않은 수정을 방지 할 수 있다.

 

C#
더보기

아래의 코드는 멤버 변수 colors는 private로 선언되었지만 public으로 선언된 getUserColors 메소드를 통해 private 배열에 대한 reference를 얻을 수 있다. 이를 통해 의도하지 않은 수정이 발생할 수 있다.

메소드를 private 으로 하거나, 복제본 반환, 수정하는 public 메소드를 별도로 만들어야 한다.


참고자료

반응형

댓글