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

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

QA

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

답변을 작성하시기 전에 로그인 해주세요.
전체 35
QA 내용 검색
filter #xss ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT