오답 이유GET으로 바꾸어도 브라우저는 인증 쿠키를 함께 보낼 수 있어 CSRF가 차단되지 않는다. 또한 상태 변경을 GET으로 처리하면 링크·프리패치만으로도 부작용이 생길 수 있다.
2
세션 쿠키의 이름만 변경한다.
오답 이유쿠키 이름은 공격자가 만드는 요청의 진위를 증명하지 못한다. 브라우저가 해당 쿠키를 자동 전송하는 구조가 그대로라면 이름만 바꿔도 방어가 되지 않는다.
3
요청마다 예측하기 어려운 CSRF 토큰을 검증한다.
정답 근거세션별 또는 요청별로 생성한 비밀·예측 불가능한 CSRF 토큰을 서버가 검증하면 공격 사이트가 정상 사용자의 유효한 상태 변경 요청을 위조하기 어렵다.
4
비밀번호를 URL 쿼리에 포함한다.
오답 이유비밀번호를 URL에 넣으면 브라우저 기록·서버 로그·Referer 등에 노출될 수 있으며, CSRF 요청의 진위를 검증하는 방법도 아니므로 부적절하다.
정답·상세해설
정답 3번
CSRF는 피해자의 브라우저가 보유한 인증 쿠키를 이용해 공격자가 의도한 상태 변경 요청을 보내게 한다. 서버가 세션과 연결된 비밀·예측 불가능한 토큰을 발급하고 상태 변경 요청마다 값의 존재와 일치를 검증하면, 공격 사이트는 유효한 요청을 만들기 어렵다. 따라서 동기화 토큰을 검증하는 ③이 가장 적절하다.