서버 측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 파일 등)이 업로드가능하고, 이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우, 시스템 내부명령어를 실행하거나 외부와 연결하여 시스템을 제어할 수 있는 보안약점
- 화이트 리스트 방식으로 허용된 확장자만 업로드를 허용
- 파일명과 확장자를 외부사용자가 추측할 수 없는 문자열로 변경하여 저장
- 저장 경로는 ‘web document root’ 밖에 위치시켜서 공격자의 웹을 통한 직접 접근을 차단
- 파일 실행여부를 설정할 수 있는 경우, 실행 속성을 제거
ex) 업로드할 파일에 대한 유효성 검사
String fileName = multi.getFilesystemName("filename");
if (fileName != null) {
//1.업로드 파일의 마지막 “.” 문자열의 기준으로 실제 확장자 여부를 확인하고, 대소문자 구별을
해야한다.
String fileExt =
FileName.substring(fileName.lastIndexOf(".")+1).toLowerCase();
//2.되도록 화이트 리스트 방식으로 허용되는 확장자로 업로드를 제한해야 안전하다.
if (!"gif".equals(fileExt) && !"jpg".equals(fileExt) && !"png".equals(fileExt))
{
alertMessage("업로드 불가능한 파일입니다.");
return;
}
}
..
Thumbnail.create(savePath+"/"+fileName, savePath+"/"+"s_"+fileName, 150);
파이썬으로 바꿔보면)
1. 확장자 확인 및 대소문자 구별
pose = fileName.find('.')+1
fileExt = fileName[pose].lower()
2. 화이트 리스트 방식으로 허용되는 확장자로 업로드 제한
if not ("gif".equals(fileExt) and "jpg".equals(fileExt) and "png".equals(fileExt)) :
alertMessage("업로드 불가능한 파일입니다.")
'Secure Coding' 카테고리의 다른 글
[시큐어코딩] 신뢰되지 않는 URL 주소로 자동접속 연결 (0) | 2021.08.09 |
---|---|
[시큐어코딩] SQL Injection (0) | 2021.08.03 |