테스트 사이트 - 개발 중인 베타 버전입니다

jsp 홈페이지 질문하나 드립니다. 채택완료

테스팅 1년 전 조회 2,017

이번에 jsp 사이트를 하나 유지보수 하기로 되가지구 관리하고있는데요! 최근에 xss 보안강화하라고 메일이 왔더라고요! 원인은 url로 스크립트 실행이 가능하다 이 내용이구요! 확인해봤더니 url에 이런식으로 넣으면 스크립트가 실행되더라고요.. ex) test.com?

 

아래 소스는 검색페이지 소슨데요! 여기서는 <, > 툭수문자를 치환해서 html로 뿌려지지않게 수정을 해놓은 부분입니다.

 

</p>

<p>/* 추가 화면 오픈 함수 */

    @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;

    }

    

}</p>

<p>

 

// 크로스사이트스크립트(XSS) 방지 부분에 replaceAll 부분은 < = lt;, > = gt; 로 치환한부분입니다. 

 

그런데 검색페이지 말고 그냥 홈페이지 어느페이지에서든 url로 스크립트를 입력해버리면 사용이 되버리네요.. 혹시 서버문제일까요.. 해경방법이 궁금합니다.

서버는 centos7입니다.

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
플라이
1년 전
태그 변환은 되었는데 이곳에 직접코드로 적어보니 그대로 반영되어 보이는군요 ㅎ
paramTagReplace 부분을 해당 변수를 받아올때 정상적으로 처리는 되었을까요?

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

댓글을 작성하려면 로그인이 필요합니다.

웅푸
1년 전

자바에서는 < 를 & lt;로  > 를 & gt;로 치환하여 안전하게 표시 해주셔야합니다.

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인