본문으로 바로가기

웹 시큐리티(Web Security)-4Day[CSRF]

category 웹/Spring 2019. 5. 28. 12:45

깃 허브:https://github.com/leejeongchan/springSecurity.git

스프링 세큐리티에서는 POST방식에서 CSRF 토큰을 넘겨줍니다.

 

CSRF 공격은 한 마디로 사이트간 요청 위조라고 불립니다.

 

즉 서버가 받아들이는 정보를 검증하지 않는 단점을 이용합니다.

 

실제로 사용자 등급과 게시물 조회수 늘리기 등 조작이 가능합니다.

 

사이트 A의 등급변경 URI가 다음과 같습니다.

 

www.aaa.com/update?grade=admin&account=123 

CSRF 공격자가 A사이트 관리자가 방문하는 B사이트의 게시글을 태그를 이용하여 작성했습니다. 아래와 같습니다.

 

<form action='www.aaa.com/update?grade=admin&account=123'>
	<input type='submit' value='이벤트 당첨!!'>
</form>

<img src='www.aaa.com/update?grade=admin&account=123'/>

공격자는 이에 따라서 등급이 관리자 등급으로 바뀌게 됩니다.

 

A 사이트 관리자가 만약 로그인 상태라면 서버 입장에서 별 따지지 않고 정상 처리를 하게 됩니다.

 

이러한 허점을 노립니다.

출처: http://boansecurity.blogspot.com/2016/09/web-csrf.html

CSRF 토큰사용자가 임의로 변경되는 토큰 값을 서버에서 체크하는 방식입니다.

 

서버에는 브라우저에 전송 시 CSRF 토큰을 함께 전달합니다.

 

즉 사용자가 POST를 통해 토큰을 전송 시 서버에서 이 토큰을 비교하게 됩니다. 

 

다를 경우 작업을 처리하지 않습니다.

 

서버에서 생성하는 토큰은 RANDOM으로 패턴을 방지합니다.

 

우리가 앞서 했던 예제에서 customLogin에서 강제로 쿠키 삭제하고 다시 호출 하면 토큰이 바뀐 것을

 

확인할 수 있습니다. 

 

바뀐 것 을 확인 할 수 있습니다.

 

공격자는 토큰이 변하기에 공격할 수 없겠죠.

 

spring에서는 CSRF 을 비활성화/활성화 할 수 있습니다.

 

<security:csrf disabled="true"/>

 

' > Spring' 카테고리의 다른 글

CKEditor 버전 문제 해결  (0) 2019.06.25
웹 시큐리티(Web Security)-5Day  (0) 2019.05.28
웹 시큐리티(Web Security)-3Day  (0) 2019.05.27
웹 시큐리티(Web Security)-2Day  (0) 2019.05.26
웹 시큐리티(Web Security)-1Day  (0) 2019.05.25