깃 허브: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 사이트 관리자가 만약 로그인 상태라면 서버 입장에서 별 따지지 않고 정상 처리를 하게 됩니다.
이러한 허점을 노립니다.
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 |