jsp 홈페이지 질문하나 드립니다.
본문
이번에 jsp 사이트를 하나 유지보수 하기로 되가지구 관리하고있는데요! 최근에 xss 보안강화하라고 메일이 왔더라고요! 원인은 url로 스크립트 실행이 가능하다 이 내용이구요! 확인해봤더니 url에 <script>alert('1');</script> 이런식으로 넣으면 스크립트가 실행되더라고요.. ex) test.com?<script></script>
아래 소스는 검색페이지 소슨데요! 여기서는 <, > 툭수문자를 치환해서 html로 뿌려지지않게 수정을 해놓은 부분입니다.
/* 추가 화면 오픈 함수 */
@GetMapping(value = "/search/result.do")
public String noticeAdd(Model model, HttpServletRequest request) throws SQLException, Exception {
MenuVO menuVO = new MenuVO();
NoticeVO noticeVO = new NoticeVO();
ContentsVO contentsVO = new ContentsVO();
model = controller.sideMenu(request, model, menuVO, "search", "result");
//웹페이지 검색결과
contentsVO.setContents(paramTagReplace(request.getParameter("totalKeyword")));
int contentsCnt = contentsService.searchContentsCount(contentsVO);
model.addAttribute("contentsList", contentsService.searchContentsList(contentsVO));
model.addAttribute("contentsCnt", contentsCnt);
//게시물 검색결과
noticeVO.setNoTitle( paramTagReplace(request.getParameter("totalKeyword")));
noticeVO.setNoStat("0010");
noticeVO.setPageIndex(0);
noticeVO.setPageSize(0);
noticeVO.setAdd1("search");
int noticeCnt = noticeService.count(noticeVO);
model.addAttribute("noticeList", noticeService.selectList(noticeVO));
model.addAttribute("noticeCnt", noticeCnt);
//이미지 검색결과
noticeVO.setAdd1( paramTagReplace(request.getParameter("totalKeyword")));
int imgCnt = noticeService.searchImgCount(noticeVO);
model.addAttribute("imgList", noticeService.searchImgList(noticeVO));
model.addAttribute("imgCnt", imgCnt);
int totalCnt = contentsCnt + noticeCnt + imgCnt;
model.addAttribute("totalKeyword", paramTagReplace(request.getParameter("totalKeyword")));
model.addAttribute("totalCnt", totalCnt+"");
return "jam_search_result";
}
// 크로스사이트스크립트(XSS) 방지
private String paramTagReplace(String paramString) {
paramString = paramString.replaceAll("<", "<");
paramString = paramString.replaceAll(">", ">");
return paramString;
}
}
// 크로스사이트스크립트(XSS) 방지 부분에 replaceAll 부분은 < = lt;, > = gt; 로 치환한부분입니다.
그런데 검색페이지 말고 그냥 홈페이지 어느페이지에서든 url로 스크립트를 입력해버리면 사용이 되버리네요.. 혹시 서버문제일까요.. 해경방법이 궁금합니다.
서버는 centos7입니다.
!-->답변 2
태그 변환은 되었는데 이곳에 직접코드로 적어보니 그대로 반영되어 보이는군요 ㅎ
paramTagReplace 부분을 해당 변수를 받아올때 정상적으로 처리는 되었을까요?
자바에서는 < 를 & lt;로 > 를 & gt;로 치환하여 안전하게 표시 해주셔야합니다.
답변을 작성하시기 전에 로그인 해주세요.