CSRF 토큰이란 CSRF 공격에 대응을 하기 위한 방어기법중 하나다
원리는 다음과 같다. 보통 CSRF공격은 특정액션시 넘어가는 파라미터를 가지고 그 행위를 특정액션이외에 자동으로 넘어가게 하는 기법인데
이것을 넘어가는값중에 랜덤으로 발행되는 키값을 넘기고 받게 해서 이값이 일치하지 않으면 그 액션을 수행하지 않는것이다.
실례로 든다면 게시판에 글을 등록시 등록폼을 통해서 반드시 등록을 해야된다는 정책을 수립하고 글을 등록폼 화면을 호출시 랜덤한 키값을 세션에 저장하고 실제로 글을 등록하려고 할때 세션에 있는 해당 키값과 넘어온 키값이 동일한지를 체크하는것이다 해당 키값이 없거나 불일치하다면 그것은 CSRF공격으로 판단하는 것이다.
하지만 이것도 우회가 가능하다.
단순 CSRF토큰만으로 체크할경우 iframe등을 통해서 해당 페이지를 호출한후 parent 에서 iframe의 스크립트를 호출하여 CSRF토큰도 생성시키는 방법으로 동작하게 할 수 있다.
이부분을 막으려면 글등록시 캡차코드와 같은것을 토입했을경우 막을 수 있다.
개인적으로는 CSRF 공격의 최상의 방어법은 캡차코드라고 생각된다. 물론 본인계정의 패스워드를 다시 묻는방법도 훌륭한 방법이다.하지만 본인계정의 패스워드를 묻는것은 개인정보수정페이지와 같이 민감한 페이지에 사용되는 것이 옳다고 생각되고 그이외에는 캡차를 체크하는게 좋다고 생각된다.
하지만... 현실적으로 개발자 입장에서 무쟈게 귀찮은 일이다. 이걸 자동화하는 프로세스 + 라이브러리가 있으면 좋겠다..