티스토리 뷰

크로스 사이트 요청 위조 

: 사이트가 신뢰하는 사용자(인증된 사용자)를 통해 공격자가 원하는 명령을 대신 실행하게 된다.



대부분의 웹사이트에서 사용자가 보내는 요청 데이터가 정상적인 경로를 통한 요청인지 구분하지 못한다. 



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


'Secure Coding' 카테고리의 다른 글

안전하지 않은 예외처리  (2) 2016.05.02
파일 업로드/다운로드 취약점  (0) 2016.05.02
크로스 사이트 스크립팅 [ XSS ]  (0) 2016.04.29
로그인 시도 횟수 제한  (0) 2016.04.28
패스워드 정책  (0) 2016.04.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함