쌍용 강북 교육센터 국비학원 Day 78일차
파일을 첨부해서 보내는 폼태그가 enctype="multipart/form-data" 으로 되어있으면 HttpServletRequest request 을 사용해서는 데이터값을 받아올 수 없다. 이때는 cos.jar 라이브러리를 다운받아 사용하도록 한 후 아래의 객체를 사용해서 데이터 값 및 첨부되어진 파일까지 받아올 수 있다.
MultipartRequest mtrequest 은 HttpServletRequest request 가 하던일을 그대로 승계받아서 일처리를 해주고 동시에 파일을 받아서 업로드, 다운로드까지 해주는 기능이 있다.
=첨부되어진 파일을 디스크의 어느 경로에 업로드 할 것인지 그 경로를 설정해야 한다.
ServletContext svlCtx = session.getServletContext();
String uploadFileDir = svlCtx.getRealPath("/images");
- 첨부되어지는 이미지 파일이 올라가는 절대경로
System.out.println(uploadFileDir);
C:\NCS\workspace(jsp)\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyMVC\images
- 위의 경로는 서버의 운영경로이며 실제경로 (개발경로)에서 운영경로로는 자동적으로 연동이 되어있는데 운영경로에서 실제경로로는 연동이 되어있지 않다.
※ MultipartRequest의 객체가 생성됨과 동시에 파일 업로드가 이루어 진다.
MultipartRequest (HttpServletRequest request,
String saveDirectory, - 파일이 저장될 경로
int maxPostSize, - 업로드할 파일 1개의 최대 크기(byte)
String encoding,
FileRenamePolicy policy) - 중복된 파일명이 올라갈 경우 파일명다음에 자동으로 숫자가 붙어서 올라간다.
파일을 저장할 디렉토리를 지정할 수 있으며, 업로드제한 용량을 설정할 수 있다. (바이트단위) 이때 업로드 제한 용량을 넘어서 업로드를 시도하면 IOException 발생된다. 또한 국제화 지원을 위한 인코딩 방식을 지정할 수 있으며, 중복 파일 처리 인터페이스를사용할 수 있다.
ex ) new MultipartRequest(request, uploadFileDir, 10*1024*1024, "UTF-8", new DefaultFileRenamePolicy() );
MultipartRequest 메소드 | ||
반환타입 | 메소드 | 설명 |
Enumeration | getFileNames() | 업로드 된 파일들에 대한 이름을 Enumeration객체에 String 형태로 담아 반환한다. 이때의 파일 이름이란 클라이언트 사용자에 의해서 선택된 파일의 이름이 아니라, 개발자가 form의 file 타입에 name 속성으로 설정한 이름을 말한다. 업로드 된 파일이 없는 경우엔 비어있는 Enumeration객체를 반환한다. |
String | getContentType (String name) | 업로드 된 파일의 컨텐트 타입을 얻어올 수 있다. 이 정보는 브라우저로부터 제공받는 정보이다. 이때 업로드 된 파일이 없는 경우에는 null을 반환한다. |
File | getFile (String name) | 업로드 된 파일의 File객체를 얻는다. 우리는 이 객체로부터 파일사이즈 등의 정보를 얻어낼 수 있다. 이때 업로드 된 파일이 없는 경우에는 null을 반환한다. |
String | getFilesystemName (String name) | 시스템에 업로드되어진 파일의 이름을 반환한다. 업로드 된 파일이 없는 경우에는 null을 반환. (파일서버에 업로드 되어진 실제파일명. 즉, 업로드시 사용자가 변경할 수도 있는 파일네임) |
String | getOriginalFileName (String name) | 중복 파일 처리 인터페이스에 의해 변환되기 이전의 파일 이름을 반환한다. 업로드 된 파일이 없는 경우에는 null을 반환한다. (즉, 클라이언트가 변경하지 않은 original Name. 다운로드를 할 때 사용한다.) |
String | getParameter (String name) | 지정한 파라미터의 값을 반환한다. 전송된 값이 없을 경우에는 null을 반환한다. |
Enumeration | getParameternames () | 폼을 통해 전송된 파라미터들의 이름을 Enumeration객체에 String 형태로 담아 반환한다. 전송된 파라미터가 없을 경우엔 비어있는 Enumeration객체를 반환한다 |
String [] | getparameterValues (String name) | 동일한 파라미터 이름으로 전송된 값들을 String 배열로 반환한다. 전송된파라미터가 없을 경우엔 null을 반환하게 된다. 동일한 파라미터가 단 하나만 존재하는 경우에는 하나의 요소를 지닌 배열을 반환하게 된다. |
크로스 사이트 스크립트 공격에 대응하는 안전한 코드 (시큐어 코드) 작성하기
예를들어 크기제한이 없는 게시물 내용 작성란에 사용자가 임의로 스크립트 태그를 입력했을시 해당 스크립트 코드는 DB에 그대로 입력되어서 실행되어지기 때문에 페이지가 망가지거나, 악성코드가 삽입 되는등 공격에 취약할 수 있다. 이러한 공격을 크로스 사이트 스크립트 공격이라고 하며, 이에 대응하는 시큐어코드 작성하는 법은 아래와 같다.
get.Parameter 를 해오는 해당하는 게시물의 변수에 아래와 같은 replaceAll 메소드를 사용해주는 것이다. 즉 부등호와 관련된 태그들을 모두 html 명령어로 막기 때문에 안전해질 수 있다.
content = content.replaceAll ( "<" , "<" );
content = content.replaceAll ( ">" , ">" );
content = content.replaceAll ( "&" , "&" );
content = content.replaceAll ( "\"", """ );
'Web > JSP' 카테고리의 다른 글
Ajax XMLHttpRequest 사용해 GET, POST 방식 데이터 전송방법 (0) | 2023.05.08 |
---|---|
쌍용강북교육센터 국비 학원 Day 77일차 JSP (input 태그 이미지 업로드) (0) | 2023.04.21 |
쌍용강북교육센터 국비 학원 Day 73일차 JSP (페이징 처리, Paging) (0) | 2023.04.17 |
쌍용강북교육센터 국비 학원 Day 70일차 JSP (radio index 이벤트, 팝업창 함수호출, 결제창 로직구현) (0) | 2023.04.12 |
쌍용강북교육센터 국비 학원 Day 69일차 JSP (Modal 값 초기화, reload, 이메일 인증코드 구현) (0) | 2023.04.11 |