1. 파일이 첨부되면 (pds resgist)에서 첨부된 파일에 관련된 내용을 로그로 기록하는 인터셉터를 하나 만들고
2. 제목에 스크립트작성해서 발생하는 오류를 예방할수잇는 인터셉트 만들거임
pds 컨트롤러 regist 수정
첨부파일은 pdsregist가 끝난후에 모델에 심어져서 와야함
@RequestMapping(value = "/regist", method = RequestMethod.POST,
produces = "text/plain;charset=utf-8")
public void regist(PdsRegistCommand registReq,
HttpServletRequest request,HttpServletResponse response)
throws Exception {
List<AttachVO> attachList = saveFile(registReq);
PdsVO pds = registReq.toPdsVO();
pds.setAttachList(attachList);
service.regist(pds);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<script>");
out.println("alert('정상적으로 등록되었습니다.');");
out.println("window.opener.location.href='"+request.getContextPath()+"/pds/list';");
out.println("window.close();");
out.println("</script>");
}
지금 모델이 없음

package kr.or.ddit.interceptor;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import kr.or.ddit.dto.AttachVO;
import kr.or.ddit.dto.MemberVO;
public class AttachFileLogInterceptor extends HandlerInterceptorAdapter {
//첨부파일은 pdsregist가 끝난후에 모델에 심어져서 와야함
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
Map<String, Object> modelMap = modelAndView.getModel();
List<AttachVO> attachList = (List<AttachVO>) modelMap.get("attachList");
MemberVO loginUser = (MemberVO)request.getSession().getAttribute("loginUser");
String log = "[File]"//파ㄹ일등록자 아이디,이름,날짜 {파일명, 파일명...},경로
+request.getRequestURI().replace(request.getContextPath(), "")+","
+loginUser.getId() + ","
+loginUser.getName() + ","
+new SimpleDateFormat("yyyy-mm-dd HH:mm:ss").format(new Date())+","+"{";
if(attachList!=null) {
for(AttachVO attach : attachList) {
log += attach.getFileName() + " ";
}
}
log += "}," + attachList.get(0).getUploadPath();
//log file 저장
String savePath = "d:\\log";
if(!new File(savePath).exists())){
new File(savePath).mkdirs();
}
String logFilePath = savePath + File.separator + "attach_file_log.csv";
BufferedWriter out = new BufferedWriter(new FileWriter(logFilePath, true));
//로그를 기록
out.write(log);
out.newLine();
out.close();
}
}
ㅅ
서블렛컨텍스트
<interceptors>
<interceptor>
<mapping path="/pds/regist.do"/>
<mapping path="/pds/modify.do"/>
<beans:bean class="kr.or.ddit.interceptor.AttachFileLogInterceptor"/>
</interceptor>
</interceptors>
수정



<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script>
alert('정상적으로 등록되었습니다.');
if(window.opener) window.opener.location.href='"+request.getContextPath()+"/pds/list';
window.close();
</script>
modify 도 (모델파라미터 추가하기)

<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<script>
alert('정상적으로 수정되었습니다.');
location.href='detail?pno=${pds.pno}&from=modify';
window.close();
</script>

cross site script? 해결할수있는 인터셉터 만들어보자
필요한 자르가잇음

//pre핸들러로 만들거임
//해당 레지스트랑 모디파이에 리퀘스트가 오게되면 가각ㄱ파라미터꺼내서
//<script>를 다 gtlt로 바꿔서 저장할거임
컨트롤러에서 받기 전에 처리해야하기때문에

웹앱어쩌구라이브러리추가ㅣ

파라미터의 값을 꺼내서 필터적용한 밸류는 어트리뷰트에 이름은 그대로 심는다.
그럼 컨트롤러족에서 그럴것이 우려가 되는것들은(타이틀, (내용은 스마트에디터가 하기떄문에 상관없음)) 파라미터에서 꺼내는게 아니라 어트리뷰트에서 꺼내는것 그럼 gtlt로바뀐내용이나온다.

request에서 어트리뷰트를 XSS로 끄내면 변환된 값이 나오는것

서블렛컨텍스트


실제소스는 gtlt 로 바뀌어잇다
