본문 바로가기

보안/시큐어코딩

[시큐어코딩-6] 입력데이터 검증및 표현(6) 신뢰되지않은 URL주소로 자동접속연결


발생원인


입력값을 자동으로 redirection 하는 사이트에서 입력값 검증이 없는 경우 발생한다.


영향


피싱이나 XSS



코드예



 안전하기 않은 코드의 예 - JAVA

……

protected void doGet(HttpServletRequest  request, HttpServletResponse response)

       throws ServletException, IOException {


 String query = request.getQueryString();

 if (query.contains("url")) {

   String url = request.getParameter("url");

   response.sendRedirect(url);  

 }

……

 

 url 파라미터에 대한 검증을 수행하지 않음

 

 


 안전한 코드의 예 - JAVA

protected void doGet(HttpServletRequest request, HttpServletResponse response) 

        throws ServletException, IOException {

 

 // 다른 페이지 이동하는 URL 리스트를 만든다.

 String allowURL[] = {  "http://url1.com", 

                               "http://url2.com", 

                               "http://url3.com" };

 

 // 입력받는 url은 미리 정해진 URL의 order로 받는다.

 String nurl = request.getParameter("nurl");

 try {

        Integer n = Integer.parseInt(nurl);

        if ( n >= 0 && n < 3)

                response.sendRedirect(allowURL[n]);

 } catch (NumberFormatException nfe) {

   //  입력값이 숫자가 아닐 경우 적절히 에러를 처리한다.

  }

}

 이동에 대한 URL을 선택하게 한다.