쿠키란 웹사이트를 방문할 경우 사용자의 웹 브라우저를 통해 인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 키, 값이 들어있는 기록 정보 파일을 일컫는다.
클라이언트의 요청에 대한 응답으로 서버에서 쿠키를 생성한다.
HTTP헤더에 쿠키를 포함시켜 응답한다.
브라우저가 서버의 응답을 받아 로컬에 저장하게 된다.
브라우저를 종료해도 만료 기간이 저장되어 있기에 로컬에서 보관하고 있다.
같은 요청을 할 시 마찬가지로 HTTP헤더에 쿠키를 포함해 응답한다.
만약 변경 사항이 있다면 쿠키가 업데이트되고 일련의 동작을 수행한다.
쿠키는 특정 도메인에서 생성되고, 그 도메인에서만 사용이 된다.
예를 들어, http://google.com 도메인에서 생성된 쿠키는 구글 도메인에서만 사용이 가능하고, http://naver.com 등 다른 도메인에서는 전달이 되지 않는다.
쿠키는 사용자 기록 정보 파일을 브라우저에 저장한다면, 세션은 서버(웹)에서 관리한다.
sessionID를 생성해 서버에 접속하는 동안 인증 상태를 유지한다.서버에 접속 시 세션ID가 부여된다.
클라이언트는 쿠키를 사용해 세션ID를 저장한다.
클라이언트가 서버에 요청 시 쿠키와 그 안의 세션ID를 서버에 전달한다.
웹(서버)는 세션ID로 정보를 가져와 응답한다.
Cross-Site Request Forgery의 약자로, 사이트 간 요청 위조를 의미한다.
웹 보안 취약점 중 하나로, 공격자가 POST, DELETE, PUT 등의 행위를 사용자의 의지와 무관하게 특정 웹사이트에 요청하는 것이다.
공격자는 credentials(자격증명)을 이용해 정보를 훔치는 것을 목적으로 한다. 예를 들어 계정을 탈취하는 등의 행위가 가능하다.
웹에서 버튼 클릭을 통해 이루어지는 검색, 로그인, 비밀번호 수정 등 모든 행위는 요청에 해당한다.
특정 요청은 아무에게나 허용되지 않고 당사자가 요청을 해야 처리를 해준다.
즉 중요한 요청이라는 뜻인데, 이 요청들이 공격자의 서버로 넘어가버리는 것이 csrf공격에 해당된다.
공격자, 즉 해커는 공격할 사이트를 분석한다.
악성 스크립트가 담긴 특정 요청을 링크로 만들어서 메일 등 개인에게 보낸다. 링크를 클릭하면 요청을 하는 것이므로 서버에 요청을 하는 꼴이 되어버린다.
이 때, 클라이언트를 sessionID로 구분한다고 했다. 페이지를 클릭(요청)할 시 쿠키에 저장된 sessionID가 브라우저에 의해 자동으로 서버에 전달된다.
서버는 이 sessionID를 읽고 인증된 사용자의 요청이라고 판단해버린다.
csrf 토큰은 서버에 들어온 요청이 실제 서버에서 허용된 요청이 맞는지 확인하는 데에 쓰인다. 새로고침할 때마다 새로 생성된다.
랜덤으로 생성된 토큰을 세션에 저장한다.
서버에 작업을 요청할 때 토큰이 세션에 저장된 토큰과 일치하는지 확인하고 토큰은 폐기된다.
CSRF공격에 대한 방어가 가능해지고 보안 수준이 높아진다.