web

파일 업로드 고려사항

datajoy 2020. 1. 29. 00:53

고려사항

고려사항 내용
파일크기  
파일명 길이

windows 기준 260자 

너무 길 경우, SQL Injection / XSS 공격에 취약.

파일 확장자

악성 스크립트(.asp .jsp .php) or 실행파일(exe)를 업로드하여 시스템 구조 확인/시스템 명령 실행이 가능. 우회 방법으로는 test.asp.kr / test.asp. / test.aSp 

[대응방법]

파일명은 전체 검사를 원칙으로 함.

확장자를 분리할 경우 ( . ) 조건문자 마지막 확장자를 검사한다.

whitelist를 관리하여 허용하는 확장자 외 모두 차단한다.

blacklist로 관리할 경우 확장자명을 소문자로 치환후 검사한다.

파일명 

보안 취약점

XSS Filename injection

SQL Filename injection

[대응방법]

영문/한글/숫자 가능

특수문자 제한

: 특수문자는 파일업로드 시 보안적인 이슈로 보수적으로 잡기위해

: whitelist로 "-", "_" 만 사용 가능하도록 함.

: windows기준( < > \ | : * ? " )

파일명 중복 업로드 시

영문 대소문자 구분없이 중복체크.(ex) Test.jpg = test.jpg)

[중복 시 대응]

복사파일생성 : 파일명에 index 추가.(ex) test.jsp 존재 시, test(1).jsp)

override : 기존 파일 삭제 후 저장.

overwrite : 기존 파일 존재할 경우 덮어쓰기.

히스토리 관리여부

관리하지 않음.

특수문자 제한이유

  • ";(세미콜론)" : 윈도우에서 세미콜론은 종단문자로써 확장자명을 우회하여 실행가능.(ex)test.asp;.jpg) 
  • "<, >, /" : XSS 공격가능. (ex) <script>alert("테스트");</script>.jpg)
  • "*, ?" : SQL Injection 공격가능. (ex) SELECT * FROM TALBE WHERE ID = ?.jpg )
  • "%" : 리눅스에서 %00, %zz는 종단문자로써 확장자명을 우회하여 실행가능.(ex)test.jsp%00.jpg)