2021-07-18

0718 파일 업로드 취약점 및 메서드 공부

1. 파일 업로드 확장자 검사

: javascript의 정규식(클라이언트) + content-type검사(서버)


2. 파일의 경로 직접노출 방지

: file을 보여줄때, img src =직접경로 : 절대금지!! 매우 위험. 디렉토리 구조가 노출된다.

따로 메서드를 만들어서 해당 url로 파일을 불러올 수 있도록 한다.


3. 파일이름 검사

: getOriginalFileName을 했을 때의 고민이 있었다. 한글문제는 인코딩 한다고 치더라도...

../../../ <-이런 악의적인 파일이름을 어떻게 할것인가? 하는 문제.

그래서 아예 파일을 저장할때는 filename을 안받고, DB에만 저장하는 식으로 했다.

(파일이름은 전부 UUID로, 사용자가 본인이 올린 파일의 이름을 임의적으로 조정못하도록@@!!) 


4. Path란 -> File클래스의 업그레이드 버전이라고 할 수 있다

https://stackoverflow.com/questions/6903335/java-path-vs-file

오라클 공식 사이트에서도 File보다 Path를 사용하라고 권고하고 있다. File클래스의 부족한 점이 있기 때문.

  • Many methods didn't throw exceptions when they failed, so it was impossible to obtain a useful error message. For example, if a file deletion failed, the program would receive a "delete fail" but wouldn't know if it was because the file didn't exist, the user didn't have permissions, or there was some other problem.

5. Files.probeContentType 메서드:

파일의 확장자(mime타입)을 검사하는 메서드. 실제 파일을 들여다보는 것이 아니라 뒤의 .을 기준으로 판단한다고 함. 나는 애초에 저장할때 확장자 .뒤로 받아서 저장했기 때문에. null이 나올 우려는 거의(?) 없다. !!

6. file.getParent()

현재파일이 위치하는 곳의 부모 디렉토리 절대경로를 리턴

댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...