티스토리 뷰

반응형

 

 

 

가. 원인

  - 자동화된 코드를 통한 요청인지 실제 사용자의 정상적인 요청인지 확인하지 않고 요청을 처리

 

 

나. 영향

  - 희생자의 권한으로 요청이 처리

  - 관리자 또는 다른 사용자의 권한을 도용하여 중요기능을 실행

 

 

다. 보안대책

  - 입력화면 폼 작성 시 POST방식을 사용

  - CSRF토큰을 이용하여 URL 직접호출을 통한 시스템 사용을 방지

  - 중요기능에 대해서 사용자 세션검증 및 재인증

 

 

라. 안전한 코드

1. CSRF토큰 이용

 

  // 1. 입력화면을 요청받은 경우

  String token = UUID.randomUUID().toString();

  session.setAttribute("CSRF_TOKEN", token);

 

  // 2. 입력화면에서 Hidden 필드를 통해 전달받은 토큰을 전달

  <input type="hidden" name="CSRF_TOKEN" value="${CSRF_TOKEN}" />

 

  // 3. 요청 처리 시

  String requestToken = request.getParameter("CSRF_TOKEN");

  String sessionToken = (String)session.getAttribute("CSRF_TOKEN");

  

  if ( requestToken == null || requestToken.equals( sessionToken )) {

     return 0;

  }

  ...

 

 

 

마. 진단방법

<사용자 검증>

  1. 주요기능을 확인

  2. 주요기능 수행 시 권한확인 절차 존재 확인

  3. 권한확인 시 자동제출되는 정보(세션쿠키, IP 등)가 아닌 것으로 검증하는지 확인

 

 

 

바. 정/오탐 케이스

<오탐 케이스>

  1. 요청 처리시 세션의 토큰과 히든필드를 통해 전달받은 토큰을 비교하여 일치하는 경우만 기능 제공 시

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday