개요
CSRF란 사이트 간 요청 위조 (Cross-site request forgery)의 줄임말로 사용자가 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하는 공격을 의미합니다.
CSRF란?
쉽게 이해하자면 하나의 피싱 방식이라고 이해할 수도 있습니다. 대표적으로 옥션에서 발생한 하나의 CSRF 사건이 있습니다. 공격 단계를 살펴보면 관리자가 사이트에 로그인 되어있을 때 관리자에게 악성 링크를 누르게하고 링크를 클릭했을 때 관리자의 비밀번호가 변경되는 URL, 예를 들어 url 파라미터로 서버에 비밀번호 변경 api로 요청하게 만들어 비밀번호가 변경된다면 이후 해커가 관리자의 변경된 비밀번호로 접속 한 후 정보를 빼간 사건이 있었습니다.
비밀번호가 변경되는 것은 하나의 대표적인 예시일 뿐 사용자의 권한과 개인정보 혹은 결제까지 실행할 수 있으며 이 외에도 다양한 행위들이 발생할 수 있다는 특징이 있습니다.
이 외 특징으로는 XSS처럼 피싱을 사용한다는 유사점이 있습니다.
차이점으로는 XSS 공격은 javascript로 클라이언트에서 발생한다는 점이지만 CSRF 공격은 서버로의 공격으로 연결된다는 점이지만 만약 사이트가 XSS공격까지 취약하다면 위와 같은 상황이 발생하기 매우 쉬워지게 됩니다.
방어 방법
1. Referer
HTTP헤더에 있는 referer 정보를 확인하여 요청이 어디서 들어왔는지, 신뢰할 수 있는지를 확인하는 방식입니다. 문제는 referer정보도 조작, 위조가 가능하다는 단점이 있습니다.
2. Token
로그인한 유저에게 토큰이 발급되어, 요청보낼 때 토큰도 반드시 보내야만 요청을 실행시킬 수 있도록하는 방식입니다.
3. Django 방식
Django 페이지 쿠키에 CSRF Token을 붙여 제공하며 해당 웹 어플리케이션에서만 실행할 수 있도록 제어하는 방식입니다.
위 토큰 방식과 비슷하지만 Django 토큰은 기본적으로 제공해주는 방식이기 때문에 검증하는 코드가 딱히 필요하지 않다는 장점이 있습니다
'TIL > 개념정리' 카테고리의 다른 글
styled-components 문법 정리 (0) | 2022.07.13 |
---|---|
File upload 취약점 (0) | 2022.07.12 |
XSS - 크로스 사이트 스크립팅 (0) | 2022.07.05 |
중첩 라우팅 / router hook (0) | 2022.07.04 |
Redux in NextJS + typescript (2) | 2022.07.03 |