반응형
자주 실수하는 시큐어 코딩 이슈 정리
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 사용
반응형
'알짜정보' 카테고리의 다른 글
이클립스 .js 파일 text로 인식될 때 수정 방법 (0) | 2022.05.17 |
---|---|
뮤료 영상 편집 사이트 추천 gif 변환 화면인녹화 자르기 영역 설정 회전 텍스트 추가 (0) | 2022.03.09 |
Code-Ray 이클립스 플러그인 설치 방법 (0) | 2022.02.15 |
excel data to json format 엑셀 데이터 json 변환 (1) | 2020.11.12 |
Java 개발자 Eclipse 필수 단축키!! Eclipse shortcut (0) | 2019.11.13 |
댓글