본문 바로가기
JAVA/JSP

JSP 파일 업로드

by KkingKkang 2023. 3. 17.
  • JSP에서 파일 업로드를 위해서는 COS라이브러리가 필요하다.
  • COS라이브러리의 Multipart Request클래스를 사용한다.
  • 순서
    1. 데이터베이스 구축하기
    2. 업로드 양식 페이지 작성하기
    3. 데이터베이스 연동 클래스 작성하기
    4. 업로드 처리 페이지 작성하기
    5. 파일 다운로드 페이지 작성하기
    6. 보안 코딩 적용하기
  • 파일 업로드 심화 과정은 다음과 같습니다
    1. 파일을 다운로드 한 횟수 저장하기
    2. 다중 파일 업로드 구현하기


데이터베이스 구축하기

  • 파일 업로드에서 반드시 구현되어야 할 정보
    • 서버에 저장된 실제 파일의 이름
    • 사용자가 지정한 파일의 이름
  • 구현하는 방법은 두 가지
    • 게시판, 프로필 등의 테이블에 파일 관련 속성을 삽입하기
    • 따로 파일 관련 테이블을 생성하기
  1. 실습용 데이터베이스 생성
CREATE DATABASE FILE;

USE FILE;

2. 파일 업로드 테이블 생성

CREATE TABLE FILE (

fileName VARCHAR(200),

fileRealName VARCHAR(200)

);

3. cos.jar 파일을 lib에 넣어주기

4. 데이터베이스 연동 클래스 작성하기

  • JDBC 라이브러리 또한 WEB-INF폴더에 삽입
  • mysql-connector .jar

워크스페이스의 .metadata → .plugins → org.eclipse.wst.server.core → 해당하는 tmp 로 감 → wtpwebapps → 작업중인 폴더 → upload폴더 생성

C:\jsp_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\FileUpload

uploadAction.jsp 에 import 추가

  • 파일 이름이 중복될 경우 자동으로 파일 이름을 변경해주는 기능
    <%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
  • multipart를 수행하는 기능
    <%@ page import="com.oreilly.servlet.MultipartRequest" %>

int maxSize = 1024 * 1024 * 100; → 총 100메가 바이트

String fileName = multipartRequest.getOriginalFileName("file");
사용자가 업로드 한 파일 이름을 넣도록

mimeType : 어떠한 데이터를 주고받을지에 대한 정보

이진 데이터 형식의 파일을 전달할 때 octet-stream 사용

application/octet-stream이란?
결국 MIME의 개별 타입 중 application에 속하는 타입, 8비트 단위의 binary data라는 뜻
"특별히 표현할 수 있는 프로그램이 존재하지 않는 데이터의 경우 기본값으로 octet-stream을 사용한다."
Content-Disposition 헤더를 attachment 로 줌으로써 해당 데이터를 수신받은 브라우저가 파일을 저장 또는 다른이름으로 저장 여부를 설정하게 할 수 있다.

MSIE = 인터넷 익스플로러


  • 파일 업로드 취약점으로 대표적인 것은 웹 쉘 업로드 취약점입니다.
  • ASP, JSP, PHP 모든 유형에서 적용이 가능한 기법입니다.
  • 공격자는 웹 쉘을 통해 서버의 명령어를 직접 실행시키게 됩니다.

보안 코딩 적용하기 (Secure Coding)

  • 업로드 가능한 확장자를 명확히 제시
  • 취약점 : 업로드 후에 삭제를 하는것이기 때문에
    업로드 하려는 쓰레드 vs 지우려는 쓰레드
    일종의 레이스 컨디션 취약점
실행되는 프로세스가 임시파일을 만드는 경우 악의적인 프로그램을 통해 그 프로세스의 실행 중에 끼어들어 임시파일을 목적파일로 연결(심볼릭 링크) 악의적인 행위를 할 수 있는데 이를 레이스 컨디션 공격이라 한다.
  • 이를 원천적을로 봉쇄하는 방법은 파일의 루트 디렉터리 밖에 업로드 폴더를 위치시키는 것이다.

파일을 다운로드 한 횟수 저장하기 
alter table file add (downloadCount INT)

 

 

반응형

'JAVA > JSP' 카테고리의 다른 글

JSTL 5가지 태그  (0) 2023.03.17
표현언어 EL  (0) 2023.03.17
액션 태그  (0) 2023.03.17
커넥션 풀  (0) 2023.03.17
JSP 자바 빈즈(Beans)  (0) 2023.03.17

댓글