728x90
- JSP에서 파일 업로드를 위해서는 COS라이브러리가 필요하다.
- COS라이브러리의 Multipart Request클래스를 사용한다.
- 순서
- 데이터베이스 구축하기
- 업로드 양식 페이지 작성하기
- 데이터베이스 연동 클래스 작성하기
- 업로드 처리 페이지 작성하기
- 파일 다운로드 페이지 작성하기
- 보안 코딩 적용하기
- 파일 업로드 심화 과정은 다음과 같습니다
- 파일을 다운로드 한 횟수 저장하기
- 다중 파일 업로드 구현하기
데이터베이스 구축하기
- 파일 업로드에서 반드시 구현되어야 할 정보
- 서버에 저장된 실제 파일의 이름
- 사용자가 지정한 파일의 이름
- 구현하는 방법은 두 가지
- 게시판, 프로필 등의 테이블에 파일 관련 속성을 삽입하기
- 따로 파일 관련 테이블을 생성하기
- 실습용 데이터베이스 생성
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)
728x90
'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 |
댓글