HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
🍀
Spring
/
🔥
파일처리 뽀사뿌자!
🔥

파일처리 뽀사뿌자!

🧐
인스타뀨램 프로젝트 진행 시 파일 확장자 검사를 진행 했지만? 확장자에 맞지 않는 파일을 강제로 변형해서 테스트를 해보면 문제없이 들어가는 문제가 있었다. 이걸 어떻게 해결할가?
 

링크 1

유효한 확장명을 가진 파일의 유효성을 검사하는 방법은 무엇인가요?

🧐
자바 코드에 대한 입력이 jpeg 파일이라고 가정했을 때, 들어온 값이 유효한 확장자를 가지고 있는지 해당 프로세스를 진행하기 전에 어떻게 확인할 수 있을까요? 때때로 사용자는 확장자를 jpeg로 수정한 pdf파일을 업로드해서 코드를 손상시키기도 합니다. 각 파일에는 매직넘버의 포인트가 있습니다 이 문제를 해결할 다른 대안이 있는걸까요?

답변 1 - 파일 이름만 확인하려면 다음과 같은 코드로 해결할 수 있습니다.

public boolean checkJPEG(File file) { String fileName = file.getName().toUpperCase(); return fileName.endsWith(".JPG") || fileName.endsWith(".JPEG"); } 그러나 이 방법은 내용이 아닌 파일 이름만 확인합니다. 더 완전한 방법은 매직 넘버 테스트를 포함합니다. public boolean checkJPEG(File file) throws IOException { String fileName = file.getName().toUpperCase(); boolean extension = fileName.endsWith(".JPG") || fileName.endsWith(".JPEG"); if (!extension) { return false; } FileInputStream in = null; try { in = new FileInputStream(file) byte[] magic = new byte[3]; int count = in.read(magic); if (count < 3) return false; return magic[0] == 0xFF && magic[1] == 0xD8 && magic[2] == 0xFF; } finally { try { if (in != null) in.close(); } catch (IOException ex) {} } }

파일 서명 목록

List of file signatures - Wikipedia
needs additional citations for verification .improve this article by (Learn how and when to remove this template message ) adding citations to reliable sources. Unsourced material may be challenged and removed.
List of file signatures - Wikipedia
https://en.wikipedia.org/wiki/List_of_file_signatures
List of file signatures - Wikipedia
 

Byte[] 에서 MimeType을 추출하는 방법

  • MIME 이란?
    • Multipurpose Internet Mail Extensions의 약자로 간략히 파일 변환을 뜻합니다.
    • 이메일과 함께 동봉할 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위해 개발 되었기 때문에 이름이 internet Mail Extension입니다.
    • 하지만 현재는 웹을 통해서 여러형태의 파일 전달하는데 쓰이고 있습니다.
  • MIME 을 왜 사용하나요?
    • MIME을 사용하기 전에는 UUEncode 방식을 이용하고 있었으며, UUEncode에는 치명적인 단점이 존재했는데 그러한 단점을 보강하여 새로운 인코딩 방식이 등장하게 되었으며 이것을 MIME이라고 합니다.
    • 예전에는 텍스트파일을 주고받는데 ASCII로 공통된 표준에 따르기만하면 문제가 없었습니다. 하지만 네트워크를 통해 ASCII 파일이 아닌 바이너리 파일을 보내는 경우가 생기게 되었습니다.
      • 이러한 바이너리파일에는 음악파일, 무비파일, 워드파일 등등의 문서를 지칭합니다.
    • 하지만 ASCII 만으로는 전송이 불가능하여 이러한 바이너리 파일들을 기존의 시스템이서 문제없이 전달하기 위해서는 텍스트 파일로 변환이 필요하게 되었습니다.
      • 이러한 텍스트 파일로 변환하는 것을 인코딩이라 하고 텍스트 파일을 바이너리 파일로 변환하는 과정을 디코딩 이라고 합니다.
    • MIME으로 인한 인코딩 한 파일은 content-type 정보를 파일의 앞 부분에 담게 되며 content-type은 여러가지 타입의 있습니다.
    • 특정 Content-type은 파일을 웹 서버로부터 전달받아 웹브라우저에서 열 수 있습니다.
      • 웹브라우저에서 서버에 접속하여 html 문서를 요청하면서 html 문서에 있는 이미지 파일의 경로를 불러올 수 있습니다.
      • 이러한 과정에서 이미지의 경로에 있는 파일이 웹브라우저에서 지원되는 MIME Type이라면 웹브라우저를 이용하여 열어볼 수 있습니다.
      • 또한 파이너리 파일도 마찬가지 입니다. 주로 쓰고 있는 대부분의 포맷인 .gif, .jpg. mov등등의 파일들은 웹브라우저에서 무리 없게 열리게 되는데 브라우저에서 지원하지 못하는 유형은 따로 지정해야 합니다.
      •  

Content-Type이란?

MIME-Type,Content-Type이란?
MIME이란? Multipurpose Internet Mail Extensions의 약자로 간략히 말씀을 드리면 파일 변환을 뜻한다. MIME는 이메일과 함께 동봉할 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위해 개발되었기 때문에 이름에 Internet Mail Extension 입니다 그렇지만 현재는 웹을 통해서 여러형태의 파일 전달하는데 쓰이고 있다.
MIME-Type,Content-Type이란?
https://juyoung-1008.tistory.com/4
MIME-Type,Content-Type이란?
  • 우리가 클라이언트 브라우저로 어떤 자원을 보낼 때(어떤 형태의 파일이나 문서 등), 웹 서버는 일련의 HTTP 헤더로 파일이나 자원을 포함하는 바이트 Stream을 앞에 보냅니다.
  • 이런 헤더는 클라이언트에게 웹 서버와 커뮤니케이션 세부사항을 묘사합니다. 예를들어, 헤더는 사용되고 있는 웹 서버의 소프트웨어의 타입, 서버의 날짜와 시간, HTTP 프로토콜, 사용중인 커넥션 타입등을 지정합니다.
  • 헤더는 또한 클라이언트가 이런 가상 패스나 도메인에 대해서 저장해야 할 쿠키를 포함합니다.
 

링크2

  • 파일 업로드는 많은 애플리케이션에서 필수적인 부분입니다.
  • 아래에는 애플리케이션에 파일 업로드를 도입할 때 확인해야 할 가장 중요한 몇가지 사항을 나열하고 정리했습니다.
  • 이것을 신뢰할 수 있는지 어떻게 압니까?
    • OWASP 파일 업로드 차트 시트로 공식 소스에서 정보를 얻었습니다.
    • 또한 Java로 작업하는 경우 이러한 원칙을 쉽게 구현할 수 있는 방법에 대한 예를 제시했습니다.