[시큐어코딩-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을 선택하게 한다. |