2023 06 27
2023-06-27
CSRF
참고: https://junhyunny.github.io/information/security/spring-boot/spring-security/cross-site-reqeust-forgery/
- 개요
- CSRF(Cross-Site Request Forgery): 사이트 간 요청 위조
- 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 웹사이트에 요청하게 하는 공격
- 정상적인 사용자가 의도하지 않았음에도, 자신도 모르게 서버를 공격
- 공격자가 만든 악성 페이지를 통해 사용자는 자신도 모르게 공격 수행
- CSRF 전제 조건과 공격 과정
- 전제 조건
- 사용자가 보안이 취약한 서버로 부터 인증을 받은 상태일 것
- 쿠키 기반으로 서버 세션 정보를 획득할 수 있을 것
- 공격자는 서버를 공격하기 위한 요청 방법에 대해 미리 파악하고 있을 것
- 공격 과정
- 사용자는 보안이 취약한 서버에 로그인
- 로그인 이후
sessionID가 사용자 브라우저 쿠키에 저장됨
- 공격자는 서버에 인증된 브라우저의 사용자가 악성 스크립트 페이지를 누르도록 유도
- 악성 스크립트를 게시글로 작성해 게시글 클릭
- 메일 등으로 링크 전달해 클릭 유도
- 쿠키에 담긴
sessionID를 통해 브라우저에 의해 서버로 요청
- 서버는 쿠키에 담긴
sessionID를 통해 사용자로 부터 요청왔구나~ 하고 처리
- CSRF 방어 방법
- Referer 검증
- 헤더 정보에서 host/referer 검증해서 유효한지 검사
- 대부분 Referer 검증으로 가능함 (어디에서 요청이 왔는지를 검사하는 것만으로 괜찮은 듯)
- CSRF 토큰 검증
- 요청하는 페이지에
hidden 타입의 input 태그를 이용한 토큰 값을 함께 전달