시큐어 코딩 솔루션 점검에 대한 질의
- 작성자 :
- 금*진
- 작성일 :
- 2014-06-20 10:00:26
- 조회수 :
- 891
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
안녕하세요
다름이 아니라 프로젝트를 마치고 종료감리를 보는데 시큐어 코딩 솔루션을 통해 감리 분이 점검을 하셨는데.
이해 할 수 없는 부분을 언급해서 질의 드립니다.
솔루션 명 : Code-Ray는 정적분석 시큐어코딩 솔루션
1.질의사항
1.1 JSP
조회 시 서버에서 보내져 오는 값을 화면에 출력시
JSTL 문법으로 처리 하기릴 권장 한다.
예)
권장 부분
<input type="hidden" name="FirstName" id="FirstName" value="<c:out value='${FirstName}'/>"/>
실제 적용된 소스 EL 방식
<input type="hidden" name="FirstName" id="FirstName" value="${FirstName}" />
-> 질의 서버에서 보내져 오는 데이터 입으로 클라이언트에서 조작이 불가능한 부분으로 알고 있는데.
EL 방식으로 해도 아무런 문제가 없는것으로 알고 있는데 이런 부분이 문제가 되는지?
2.2 java
2.1 업로드된 파일의 저장이름(시퀀스)으로 파일의 특수문자 체크
-->저장된 정보 조회 후 넘겨서 오는 정보
templateFilePath ->업로드시 저장된 파일의 경로(프로퍼티로 선언되어 있음)
templateFile -> 업로드 시 파일의 실제명이 아니라 변환된 (시퀀스 번호)
tempFullName = templateFilePath+templateFile;
File f = new File(tempFullName);
선언을
// 특수문자열 포함여부 체크
예) if(filename.contains("..") || filename. contains("/"))return 0;
로 검사하도록 해야 한다는데 파일을 업로드시 실제 이름과 저장된 이름을 가지고 있어
저장된 파일명(시퀀스번호)로 변환되어 불어 들어와 처리 하는 부분인데
특수문자를 체크 해야 하는지?
2.2 try catch 부분
권장부분
try { g(); }
catch (IOException e) {
// end user가 볼 수 있는 오류 메시지 정보를 생성하지 않아야 한다.
System.err.println("IOException Occured");
}
<샘플코드>
// ...
public static void main(String[] args) {
String urlString = args[0];
try{
URL url = new URL(urlString);
URLConnection cmx = url.openConnection();
cmx.connect();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
<시큐어코딩>
public static void main(String[] args) {
String urlString = args[0];
try{
URL url = new URL(urlString);
URLConnection cmx = url.openConnection();
cmx.connect();
}
catch (Exception e) { System.out.println("연결 예외 발생"); }
}
왜? catch (IOException e) System.err.println("IOException Occured");을 사용하라고 하는지
원래 System.err.println 도 시스템의 부하를 줄수 있기 때문에 log4를 사용하고 실제 에러 로그인
was에서 제고하는 log 파일을 보게 되고 catch가 발생하면 error.jsp로 호출되도록 해 두었는데?
문제가 되는지?
기타 여러개가 있지만 대표적인 몇가지만 적어 봅니다.
다름이 아니라 프로젝트를 마치고 종료감리를 보는데 시큐어 코딩 솔루션을 통해 감리 분이 점검을 하셨는데.
이해 할 수 없는 부분을 언급해서 질의 드립니다.
솔루션 명 : Code-Ray는 정적분석 시큐어코딩 솔루션
1.질의사항
1.1 JSP
조회 시 서버에서 보내져 오는 값을 화면에 출력시
JSTL 문법으로 처리 하기릴 권장 한다.
예)
권장 부분
<input type="hidden" name="FirstName" id="FirstName" value="<c:out value='${FirstName}'/>"/>
실제 적용된 소스 EL 방식
<input type="hidden" name="FirstName" id="FirstName" value="${FirstName}" />
-> 질의 서버에서 보내져 오는 데이터 입으로 클라이언트에서 조작이 불가능한 부분으로 알고 있는데.
EL 방식으로 해도 아무런 문제가 없는것으로 알고 있는데 이런 부분이 문제가 되는지?
2.2 java
2.1 업로드된 파일의 저장이름(시퀀스)으로 파일의 특수문자 체크
-->저장된 정보 조회 후 넘겨서 오는 정보
templateFilePath ->업로드시 저장된 파일의 경로(프로퍼티로 선언되어 있음)
templateFile -> 업로드 시 파일의 실제명이 아니라 변환된 (시퀀스 번호)
tempFullName = templateFilePath+templateFile;
File f = new File(tempFullName);
선언을
// 특수문자열 포함여부 체크
예) if(filename.contains("..") || filename. contains("/"))return 0;
로 검사하도록 해야 한다는데 파일을 업로드시 실제 이름과 저장된 이름을 가지고 있어
저장된 파일명(시퀀스번호)로 변환되어 불어 들어와 처리 하는 부분인데
특수문자를 체크 해야 하는지?
2.2 try catch 부분
권장부분
try { g(); }
catch (IOException e) {
// end user가 볼 수 있는 오류 메시지 정보를 생성하지 않아야 한다.
System.err.println("IOException Occured");
}
<샘플코드>
// ...
public static void main(String[] args) {
String urlString = args[0];
try{
URL url = new URL(urlString);
URLConnection cmx = url.openConnection();
cmx.connect();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
<시큐어코딩>
public static void main(String[] args) {
String urlString = args[0];
try{
URL url = new URL(urlString);
URLConnection cmx = url.openConnection();
cmx.connect();
}
catch (Exception e) { System.out.println("연결 예외 발생"); }
}
왜? catch (IOException e) System.err.println("IOException Occured");을 사용하라고 하는지
원래 System.err.println 도 시스템의 부하를 줄수 있기 때문에 log4를 사용하고 실제 에러 로그인
was에서 제고하는 log 파일을 보게 되고 catch가 발생하면 error.jsp로 호출되도록 해 두었는데?
문제가 되는지?
기타 여러개가 있지만 대표적인 몇가지만 적어 봅니다.
A
안녕하세요. 금성진님.
우선 공공부문의 시큐어 코딩의 경우 해당 기준 및 수정 방식은 전자정부 표준프레임워크센터가 아닌 KISA에서 담당하고 있습니다.
따라서 저희측에서 정확한 답변을 드리기는 어렵습니다.
단지 정적분석 시큐어 코딩 솔루션은 위험 가능성이 있는 구문을 탐지해 내는 형태로서,
1.1 의 경우 사용자가 javascript 구문등을 html 코드내에 삽입 할 가능성이 있는 구문으로 탐색이 되어, c:out을 권장하고 있는 것 같습니다.
2.1 의 경우도 솔루션 자체에서 구문 탐색만으로 사용자가 시스템 내에 임이의 명령어를 삽입할 수 있는 가능성이 탐지 및
2.2 의 경우도 e.printStackTrace(); 구문 자체를 탐색하여 걸러내고 있는 것으로 보입니다.
따라서 수정이 불가능 하신 경우에는, 프로젝트 내부적으로 위험성이 없는 구문이라는 예외 처리를 하여서 진행하셔야 할 것 같습니다.
감사합니다.
우선 공공부문의 시큐어 코딩의 경우 해당 기준 및 수정 방식은 전자정부 표준프레임워크센터가 아닌 KISA에서 담당하고 있습니다.
따라서 저희측에서 정확한 답변을 드리기는 어렵습니다.
단지 정적분석 시큐어 코딩 솔루션은 위험 가능성이 있는 구문을 탐지해 내는 형태로서,
1.1 의 경우 사용자가 javascript 구문등을 html 코드내에 삽입 할 가능성이 있는 구문으로 탐색이 되어, c:out을 권장하고 있는 것 같습니다.
2.1 의 경우도 솔루션 자체에서 구문 탐색만으로 사용자가 시스템 내에 임이의 명령어를 삽입할 수 있는 가능성이 탐지 및
2.2 의 경우도 e.printStackTrace(); 구문 자체를 탐색하여 걸러내고 있는 것으로 보입니다.
따라서 수정이 불가능 하신 경우에는, 프로젝트 내부적으로 위험성이 없는 구문이라는 예외 처리를 하여서 진행하셔야 할 것 같습니다.
감사합니다.