반응형
CSRF 란
CSRF(Cross-Site Request Forgery)는 웹 사이트의 취약점을 이용하여 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행동을 하도록 하는 공격 방법이다.
- 웹사이트에 로그인된 사용자가 공격자가 만든 사이트에 접속하면, 그 사이트는 인증정보를 이용해 공격 대상인 웹사이트에 악의적인 요청을 보낼수 있다. 이때 사용자는 이과정에 전혀 무의식적으로 공격자의 의도대로 움직이며 이런 공격이 일어나고 있다는 것을 알 수 없다.
- 이렇게 악의적인 요청이 이루어지는 이유는 브라우저가 요청을 보낼 때 자동적으로 사용자의 인증정보(예: 쿠키)를 포함시키기 때문이다.
- 그결과, 공격 대상 웹사이트는 이를 정상적인 요청으로 인식하게 된다.
- 이런 공격을 CSRF공격이라고 한다.
- 이를 방어하기 위한 가장 일반적인 방법은 CSRF토큰을 사용하는 것이다.
- CSRF토큰은 서버가 랜덤하게 생성하여 폼에 포함시키는 값이다.
- 사용자가 폼을 제출할 때 이 CSRF 토큰도 함께 제출되고, 서버는 이 토킅값을 확인해. 요청이 실제 사용자로 부터 온 것인지 판단한다.
- 만약 토큰이 일치하지 않으면, 요청은 CSRF 공격으로 간주하고 거부하게 된다.
- Django와 같은 웹프레임 워크는 CSRF 공격 방어를 위한 기능을 내장하고 있다.
<form method="POST"> {% csrf_token %} <!-- form fields --> <button type="submit">Submit</button> </form>
- 이와 같이 하면, Django는 폼을 랜더링할 때 자동으로 CSRF토큰을 생성하고 이를 폼에 추가한다.
- 그리고 폼 제출 시 이 토큰을 검사해 요청이 유효한지를 확인한다.
- 이외에도, SameSite쿠키 설정, Referrer헤더 검사 등과 같은 방법으로도 CSRF 공격을 방어할수 있다.
반응형