wafflestudio/seminar-2020

GET /api/v1/user/logout/ 의 CSRF 취약 여부에 대하여

Open

#118 opened on Sep 6, 2020

 (2 comments) (3 reactions) (0 assignees)Python (49 forks)auto 404
HW1backendgood first issuequestion

Repository metrics

Stars
 (27 stars)
PR merge metrics
 (PR metrics pending)

Description

backend seminar1의 과제에서 아래와 같이 지시하고 있습니다.

  1. 유저가 로그아웃할 수 있도록 내부적으로 Django의 logout()을 활용한 GET /api/v1/user/logout/ API를 개발하세요.

GET은 서버의 상태를 변경하지 않는 '안전한' 요청이어야 하는데, logout은 서버에서 해당 세션에 authenticate된 'user' 정보를 변경하는 작업입니다. 그렇다면 logout API는 POST나 PUT 요청으로 이루어져야 하는 것인가요? 만약 'logout'에 대해 CSRF를 할 수 있다면 모든 유저가 로그인하는 즉시 로그아웃 되도록 하는 DoS 공격이 가능하다고 생각합니다.

실제 구현에서는 어떻게 되어 있는지 궁금해서, my.snu.ac.krgithub.com의 로그아웃을 firefox의 개발자 도구를 이용하여 확인해 보았습니다. mysnu에서는 GET 요청을 이용하여 로그아웃하였고, github에서는 다음 사진처럼 POST 요청을 이용하여 로그아웃했습니다.

github 로그아웃 요청 화면

로그아웃에 GET을 사용하는 것이 일반적인지 궁금합니다.

Contributor guide