Secure Coding
크로스 사이트 요청 위조 [ CSRF ]
best
2016. 4. 29. 14:24
크로스 사이트 요청 위조
: 사이트가 신뢰하는 사용자(인증된 사용자)를 통해 공격자가 원하는 명령을 대신 실행하게 된다.
대부분의 웹사이트에서 사용자가 보내는 요청 데이터가 정상적인 경로를 통한 요청인지 구분하지 못한다.
1. GET 방식 CSRF
: 공격자는 게시판 등에 이미즈 태그를 보이지 않도록 사이즈를 최소화하여 자신의 계좌로 이체를 수행하는 요청 URL을 삽입해, 사용자가 해당 글을 클릭했을 때 계좌 이체가 실행되도록 공격할 수 있다.
2. POST 방식 CSRF
: 가장 많은 CSRF 공격방식은 자동 글쓰기 이다.
3. 대응기법
: CSRF 공격 취약점을 예방하려면 실제 사용자의 브라우저에서 이볅된 값을 이용해 요청이 발생되었는지를 서버에서 점검할 수 있도록 해야 한다.
- CSRF 를 근본적으로 해결하기 위해 사용자 세션마다 고유한 토큰값을 발생시킨다.
1
2
3
4 |
// Token 값 생성 및 등록 코드 작성
// 이후 게시판 글 쓰기 페이지에서 Token 값 전달 받아 비교.
String csrfToken = UUID.randomUUID().toString();
session.setAttribute(Session.CSRF_TOKEN, csrfToken); |
cs |
- 발급한 Token을 페이지마다 전달한다.
1 |
<input type="hidden" name="csrfToken" value="${sessionScope._CSRF_TOKEN_}" /> |
cs |
- Token을 비교한다.
1
2
3
4
5
6 |
String storedCsrfToken = (String) session.getAttribute(Session.CSRF_TOKEN);
String requestedCsrfToken = request.getParameter("csrfToken");
if( storedCsrfToken == null || !storedCsrfToken.equals(requestedCsrfToken)){
return new ModelAndView("redirect:/board/write");
} |
cs |