jsp 홈페이지 질문하나 드립니다.

jsp 홈페이지 질문하나 드립니다.

QA

jsp 홈페이지 질문하나 드립니다.

답변 2

본문

이번에 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;로 잘 되고있어요 결과페이지에서 텍스트로 추출해도 잘 치환되어서 나오구요! 근데 문제자체가 검색페이지랑은 별개로 그냥 도메인 뒤에 test.com?<script>alert("1");</script> 이런식으로만 접속해도 스크립트가 실행되는게 문제인거같아요 ㅠㅠ 원인을 알수가 없네여

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 0
© SIRSOFT
현재 페이지 제일 처음으로