323
23
장
CSRF 공격 방어
록 개별적으로 정의할 수도 있다. 이 미들웨어는
origin
과
referer
헤더가 올바른지 검증한
다음
CSRF
토큰이 유효한지 확인한다. 그 두 가지 중 하나라도 실패하면 다른 로직을 호출하
기 전에 오류를 반환한다. 그렇지 않은 경우는 다음 번 미들웨어로 이동해 애플리케이션의 수
행을 이어가게 할 수 있다.
이 미들웨어는 클라이언트가 요청을 할 때마다 지속적으로
CSRF
토큰을 서버에 전달하는 것
에 의존하므로 클라이언트에도 그러한 자동화를 복제하는 것이 최적일 것이다. 이는 여러 가
지 기법을 통해 이뤄질 수 있다. 한 가지 예로 프록시 패턴을 이용하면 토큰을 항상 포함하도록
XMLHttpRequest
의 기본적인 행위를 덮어쓸 수 있다.
좀 더 단순한 방법으로는
XMLHttpRequest
를 감싸서 요청을 만들어내는 라이브러리를 작성해
HTTP
동사에 맞는 올바른 토큰을 주입할 수도 있다.
23.4
마치며
HTTP
GET
요청이 애플리케이션 상태를 절대 바꾸지 않는다는 것을 확인함으로써
CSRF
공
격의 상당 부분을 완화할 수 있다. 또한
CSRF
완화를 위해 헤더를 검증하고 각 요청에 대해
CSRF
토큰을 추가하는 것을 검토해야 한다. 이러한 완화 조치를 적절히 해두면 사용자들이 다
른 원점으로부터 좀 더 편안하게 웹 애플리케이션을 방문할 수 있게 하면서도 악의적 의도를
가진 해커에 의해 계정 퍼미션이 침해당하는 위험을 줄일 수 있다.