정보보안/정보보호 Q&A

웹 애플리케이션에서 CSRF 공격은 무엇이며, 이를 방어하기 위한 방법은 무엇인가?

itnyaong 2025. 2. 14. 13:25

1. CSRF(Cross-Site Request Forgery)의 개념

  • 웹 애플리케이션이 비정상적인 요청을 구분하지 못할 때 공격자가 업로드한 게시물 등을 희생자가 클릭하여 데이터를 요청할 때 희생자의 권한으로 조작된 요청이 발생하는 공격 (XSS와 다른 점은 희생자의 권한으로 조작된 요청 발생)

2. 방어 방법

2.1. CSRF 토근 사용

  • 각 요청마다 고유한 토큰을 포함시켜서 서버가 이 토큰을 검증함으로써 비정상적인 요청을 방지 (토큰은 사용자 세션과 연동되어야 함)

2.2. SameSite 쿠키 설정

  • 쿠키의 SameSite 속성을 Strict 또는 Lax로 설정하면 다른 사이트에서 넘어온 요청에는 쿠기가 전송되지 않음 (CSRF 공격에서 사용되는 자동 로그인 세션이 적용되지 않아 공격이 무력화 됨)

2.3. Referer 검증

  • 서버가 HTTP Referer 헤더를 확인해 올바른 출처에서 요청이 왔는지 검사 (Referer는 조작이 가능하기 때문에 보조적인 방법으로만 사용)

2.4. CORS(Cross-Origin Resource Sharing) 정책 강화

  • CORS를 설정하여 신뢰할 수 있는 도메인에서 오는 요청만 허용하도록 제한

* CORS

  • 웹 브라우저의 보안 정책 중 하나로 다른 출처(도메인, 프로토콜, 포트)에서 리소스를 요청할 때 해당 요청을 허용할지 결정하는 메커니즘
  • 브라우저가 다른 출처로 요청을 보낼 때 서버는 응답 헤더에 Access-Control-Allow-Origin을 포함하여 허용된 출처를 명시해야 함 (ex: Access-Control-Allow-Origin: https://itnyaong.tistory.com)
  • 서버 측 설정으로 클라이언트(브라우저)에서는 CORS를 우회하거나 설정할 수 없음