알짜정보

자주 실수하는 시큐어 코딩 이슈 정리

리커니 2022. 2. 16.
반응형

자주 실수하는 시큐어 코딩 이슈 정리

 

1. SQL 삽입 (Mybatis)

원인

Mybatis를 활용한 쿼리문에 '$'를 사용할 경우 발생

 

이유

개발자가 의도하지 않은 동적 쿼리 작성으로 SQL Injection 공격 가능

 

해결방안

'$' 대신 '#' 을 사용, 또는 $ 제거

 

예시

SELECT A
  FROM ${TABLE}
  
=>

SELECT A
  FROM A_TABLE

 

2. 부적절한 자원 해제 (Java IO)

원인

Stream 자원을 활용하고 반환하지 않은 경우 발생

 

이유

Open File Descriptor, Heap Memory, Socket, DB 등 유한 자원을 반환하지 않은 경우 메모리 이슈 발생 가능

 

해결방안

Reader/Writer, BufferReader/BufferWriter, PipedReader/PipedWriter 과 각종  Stream 사용 후 finally 문에서 자원 해제

 

예시

try{
    writer.writer("java");
    writer.close();
} catch(IOException e){
    LOGGER.info("File Writer Error", e);
}

=>

try{
    writer.writer("java");
} catch(IOException e){
    LOGGER.info("File Writer Error", e);
} finally {
    writer.close();
}

 

3. 중요한 자원에 대한 잘못된 권한 설정 (Java File)

원인

파일, 폴더 생성 시 권한에 대한 설정 없이 생성

 

이유

개발자 이외 허가받지 않은 사용자가 파일 및 폴더에 접근

 

해결방안

파일 폴더 생성에 대한 권한을 설정

 

예시

String src = "경로";
File dir = new File(src);

if(!dir.exists()){
    dir.mkdir();
}
.
.
.

=>

String src = "경로";
File dir = new File(src);
dir.setExecutable(false, true); /*파일 실행 권한 설정 (파라미터 - 일반, 소유자)*/
dir.setReadable(true); /*파일 읽기 권한 설정*/
dir.setWritable(false, true); /*파일 쓰기 권한 설정 (파라미터 - 일반, 소유자)*/

if(!dir.exists()){
    dir.mkdir();
}
.
.
.

 

4. 오류 메시지를 통한 정보 노출 (Java Exception)

 

원인

e.getMessage(), e.toString(), e.printStrackTrace(); 사용

 

이유

e.getMessage(), e.toString(), e.printStrackTrace(); 등은 오류와 관련된 시스템 정보 노출

 

해결방안

별도의 로직이나 Logger 사용

 

예시

try{

}catch(NullPointException e){
	e.printStackTrace();
}

=>

try{

}catch(NullPointException e){
	LOGGER.error("빈 값이 존재");
}

 

5. 기타 

아이디 패스워드 등 중요정보의 암호화 부제

DB 접속정보의 하드코딩

파라미터의 검증 없이 사용

부적절한 Exception 사용

반응형

댓글

💲 추천 글