재질문 $보안취약성 Controller처리샘플 요청
- 작성자 :
- 이*석
- 작성일 :
- 2015-02-16 10:09:47
- 조회수 :
- 652
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
안녕하세요
답변 잘 받았습니다.
Controller에서 어떤식으로 처리했는지 Sample 요청드립니다.
수고하세요
------- 이전답변--------------------------------------------------------------------------------------------------------------------------------
안녕하세요. 이정석님.
보안 점검 내용처럼 #..# 대신 $..$를 사용하는 것은 보안 상에 문제가 있습니다. (처리 상의 성능 저하도 발생할 수 있음)
해당 부분에 대하여 원할하게 수정할 수 있는 방법은 없는 것 같습니다.
추가적으로 표준프레임워크 상의 표준 또한 #..# 방식을 사용하도록 되어 있습니다.
공통컴포넌트의 일부 DBMS의 경우 select 컬럼에 #..#를 사용하지 못하는 문제가 있는 경우만 제한적으로 $..$가 사용되었으며,
이 경우 Controller 부분에서 보안 상의 문제가 없도록 파라미터에 대한 점검을 수행하여 KISA 보안 점검을 받았습니다.
그럼, 즐거운 하루되십시오.
감사합니다.
-----------------------------------------------------------------------------------------------------------------------------
답변 잘 받았습니다.
Controller에서 어떤식으로 처리했는지 Sample 요청드립니다.
수고하세요
------- 이전답변--------------------------------------------------------------------------------------------------------------------------------
안녕하세요. 이정석님.
보안 점검 내용처럼 #..# 대신 $..$를 사용하는 것은 보안 상에 문제가 있습니다. (처리 상의 성능 저하도 발생할 수 있음)
해당 부분에 대하여 원할하게 수정할 수 있는 방법은 없는 것 같습니다.
추가적으로 표준프레임워크 상의 표준 또한 #..# 방식을 사용하도록 되어 있습니다.
공통컴포넌트의 일부 DBMS의 경우 select 컬럼에 #..#를 사용하지 못하는 문제가 있는 경우만 제한적으로 $..$가 사용되었으며,
이 경우 Controller 부분에서 보안 상의 문제가 없도록 파라미터에 대한 점검을 수행하여 KISA 보안 점검을 받았습니다.
그럼, 즐거운 하루되십시오.
감사합니다.
-----------------------------------------------------------------------------------------------------------------------------
A
안녕하세요. 이정석님.
점검에 대한 부분은 실제 어떻게 파라미터를 사용하셨는지에 따라 다르고, DBMS에 따라 치환되어야 할 데이터가 다르기 때문에 상황에 따라 적용하시는 부분입니다.
공통컴포넌트의 경우는 select 컬럼 상의 년도, 월에 대한 부분만을 사용하였기 때문에 문제가 되는 데이터를 치환하는 방식이 아니라,
실제 지정되는 파라미터가 사용자로부터 입력되는 부분이 아닌 내부적으로 처리된 숫자(년도, 월)로 지정되는 방식입니다.
※ 공통컴포넌트에서는 아래와 같이 극히 일부만 $..$ 방식이 적용되고, 모두 #..# 방식으로 적용되어 있으며, 일반적인 상황에서는 #..# 방식으로 전환하는 것이 맞으실 것 같습니다. (치환 처리 방식은 별도의 sample은 없음)
e.g) 달력 데이터 처리 부분
Calendar cal = Calendar.getInstance();
if(restde.getYear()==null || restde.getYear().equals("")){
restde.setYear(Integer.toString(cal.get(Calendar.YEAR)));
}
if(restde.getMonth()==null || restde.getMonth().equals("")){
restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1));
}
int iYear = Integer.parseInt(restde.getYear());
int iMonth = Integer.parseInt(restde.getMonth());
if (iMonth<1){
iYear--;
iMonth = 12;
}
if (iMonth>12){
iYear++;
iMonth = 1;
}
if (iYear<1){
iYear = 1;
iMonth = 1;
}
if (iYear>9999){
iYear = 9999;
iMonth = 12;
}
restde.setYear(Integer.toString(iYear));
restde.setMonth(Integer.toString(iMonth));
cal.set(iYear,iMonth-1,1);
restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK));
restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE));
List<?> CalInfoList = restdeManageService.selectNormalRestdePopup(restde); // $..$를 가지고 있는 xml 처리 포함
그럼, 즐거운 하루되십시오.
감사합니다.
점검에 대한 부분은 실제 어떻게 파라미터를 사용하셨는지에 따라 다르고, DBMS에 따라 치환되어야 할 데이터가 다르기 때문에 상황에 따라 적용하시는 부분입니다.
공통컴포넌트의 경우는 select 컬럼 상의 년도, 월에 대한 부분만을 사용하였기 때문에 문제가 되는 데이터를 치환하는 방식이 아니라,
실제 지정되는 파라미터가 사용자로부터 입력되는 부분이 아닌 내부적으로 처리된 숫자(년도, 월)로 지정되는 방식입니다.
※ 공통컴포넌트에서는 아래와 같이 극히 일부만 $..$ 방식이 적용되고, 모두 #..# 방식으로 적용되어 있으며, 일반적인 상황에서는 #..# 방식으로 전환하는 것이 맞으실 것 같습니다. (치환 처리 방식은 별도의 sample은 없음)
e.g) 달력 데이터 처리 부분
Calendar cal = Calendar.getInstance();
if(restde.getYear()==null || restde.getYear().equals("")){
restde.setYear(Integer.toString(cal.get(Calendar.YEAR)));
}
if(restde.getMonth()==null || restde.getMonth().equals("")){
restde.setMonth(Integer.toString(cal.get(Calendar.MONTH)+1));
}
int iYear = Integer.parseInt(restde.getYear());
int iMonth = Integer.parseInt(restde.getMonth());
if (iMonth<1){
iYear--;
iMonth = 12;
}
if (iMonth>12){
iYear++;
iMonth = 1;
}
if (iYear<1){
iYear = 1;
iMonth = 1;
}
if (iYear>9999){
iYear = 9999;
iMonth = 12;
}
restde.setYear(Integer.toString(iYear));
restde.setMonth(Integer.toString(iMonth));
cal.set(iYear,iMonth-1,1);
restde.setStartWeekMonth(cal.get(Calendar.DAY_OF_WEEK));
restde.setLastDayMonth(cal.getActualMaximum(Calendar.DATE));
List<?> CalInfoList = restdeManageService.selectNormalRestdePopup(restde); // $..$를 가지고 있는 xml 처리 포함
그럼, 즐거운 하루되십시오.
감사합니다.