시큐어코딩 Public 메소드로부터 반환된 Private 배열
- 작성자 :
- 시***딩
- 작성일 :
- 2020-11-13 12:41:51
- 조회수 :
- 3,088
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
private UserVO[] userVoList;
public UserVO[] getUserVoList() {
UserVO[] userVos = null;
if (userVoList != null) {
// 배열을 복사한다.
userVos = new UserVO[userVoList.length];
for (int i = 0; i < userVos.length; i++) {
try {
userVos[i] = (UserVO) this.userVoList[i].clone();
System.out.println("유저 이름 : " + this.userVoList[i].getUserName());
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return userVos;
}
답변 해주신 거 잘 받았습니다..
다음과 같이 수정하여도 안됩니다.. 객체를 clone 하던 새로 생성해서 똑같이 넣어주던
리턴값을 새로운 객체를 생성해서 넣으면 안되는데...
return userVoList; < 이 원래 변수를 리턴해주지 않는 이상 값은 Null로 됩니다.
전자정부프레임워크에서만 이러는데...한번 확인 해줄 수는 없나요?
public UserVO[] getUserVoList() {
UserVO[] userVos = null;
if (userVoList != null) {
// 배열을 복사한다.
userVos = new UserVO[userVoList.length];
for (int i = 0; i < userVos.length; i++) {
try {
userVos[i] = (UserVO) this.userVoList[i].clone();
System.out.println("유저 이름 : " + this.userVoList[i].getUserName());
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return userVos;
}
답변 해주신 거 잘 받았습니다..
다음과 같이 수정하여도 안됩니다.. 객체를 clone 하던 새로 생성해서 똑같이 넣어주던
리턴값을 새로운 객체를 생성해서 넣으면 안되는데...
return userVoList; < 이 원래 변수를 리턴해주지 않는 이상 값은 Null로 됩니다.
전자정부프레임워크에서만 이러는데...한번 확인 해줄 수는 없나요?
A
안녕하세요.
표준프레임워크 센터입니다.
커스텀이 진행된 환경은 모든 상황을 정확히 맞추어 테스트 하기는 어려운 점 미리 양해 부탁드립니다.
현재 센터에서 테스트 한 결과 clone을 이용하여 public 메소드에서 반환된 private 배열요소의 취약점을 해결하는 것은 문제가 없어 보입니다.
질문자님의 이전 질문글의 테스트 수행과 관련된 첨부 자료 이미지에서
UserVOList에 값이 제대로 들어 간 것인지 확인 할 수 없습니다.
정상출력에서의 로그와 비정상 출력에서의 로그를 비교해 보시면
비정상 출력에서는 `게터 : 123` 등이 출력되지 않는것을 확인 하실 수 있습니다.
SampleVO의 101번째 줄 System.out.println("게터: " + userVo.getUserName());의 출력은
return이 userVoList냐 list냐 상관 없이
userVoList의 값이 제대로 들어갔는지를 알 수 있는 문 갔습니다.
우선 setter가 정상적으로 작동어 userVoList가 제대로 들어가고 있는지 확인이 필요해 보입니다.
감사합니다.
표준프레임워크 센터입니다.
커스텀이 진행된 환경은 모든 상황을 정확히 맞추어 테스트 하기는 어려운 점 미리 양해 부탁드립니다.
현재 센터에서 테스트 한 결과 clone을 이용하여 public 메소드에서 반환된 private 배열요소의 취약점을 해결하는 것은 문제가 없어 보입니다.
질문자님의 이전 질문글의 테스트 수행과 관련된 첨부 자료 이미지에서
UserVOList에 값이 제대로 들어 간 것인지 확인 할 수 없습니다.
정상출력에서의 로그와 비정상 출력에서의 로그를 비교해 보시면
비정상 출력에서는 `게터 : 123` 등이 출력되지 않는것을 확인 하실 수 있습니다.
SampleVO의 101번째 줄 System.out.println("게터: " + userVo.getUserName());의 출력은
return이 userVoList냐 list냐 상관 없이
userVoList의 값이 제대로 들어갔는지를 알 수 있는 문 갔습니다.
우선 setter가 정상적으로 작동어 userVoList가 제대로 들어가고 있는지 확인이 필요해 보입니다.
감사합니다.