팀원들과 서로 만든 페이지의 CSRF 보안을 체크해주었다. 체크한 중점사항은 1) 로그인한 유저의 게시글 작성 API, 2) 사용자 댓글 작성자의 댓글 수정/삭제 API의 CSRF 보안이었다. 아래와 같은 플로우로 다행히 문제는 해결했다.
로그인한 유저의 게시글 작성 API는 CSRF 보안이 잘되어있었다.
잘되어 있었던 까닭은, 게시글 작성 API에서 DB에 입력된 데이터를 저장하기 전에, API에 request를 보낸 사용자의 브라우저 localstorage에 담긴 token 데이터를 가져와서, 이 token data가 User DB에 존재하는지부터 검토하는 로직이 있었기 때문이었다. 즉, 로그인한 사용자 = 실제 회원가입한 사용자
를 검토하기 때문에, CSRF 이슈가 발생하지 않았던 것이다.
그런데, 사용자 댓글 작성자의 댓글 수정/삭제 API는 CSRF 문제가 발생했다.
문제가 발생했던 까닭은, 게시글 작성 API와는 다르게, Request를 보낸 브라우저의 localStorage에 담긴 토큰 데이터를 UserDB와 비교해보는 로직이 없었기 때문이었다.
이에, 게시글 작성 API의 로직을 활용해서, 댓글 수정/삭제 API에 Request를 보낸 브라우저의 localStorage의 token 값을 디코드 + token 디코드한 값을 기준으로 Comment DB에서 request 받은 댓글을 탐색, 수정/댓글 실행하도록 했다.