강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

흔들거북이님의 프로필 이미지
흔들거북이

작성한 질문수

강의 하나로 끝내는 백엔드 모든 지식!

해커로부터 내 서비스 지키기! 웹 보안 기초 (SQL 인젝션, XSS, CSRF)

13강 보안 기초 - CSRF 검증 방식 추가 질문 입니다.

작성

·

14

·

수정됨

0

안녕하세요. 강의 너무 잘 듣고 있습니다.

 

CSRF 대응 관련하여 CSRF Token을 form hidden으로 처리하는 방식이 대표적인 처리 방법으로 알고 있고, 강의에서도 그렇게 소개 시켜주셨습니다.

 

HTML을 서버측에서 렌더링 할 때에는 언급해주신 프레임워크에서 제공해주는 기능을 활용하면 간단하게 구현이 가능한것으로 알고 있는데,

 

만약 프론트와 백엔드가 분리된 환경에서는 CSRF 토큰을 어떤식으로 검증 및 처리하는게 일반적인가요?

 

당장 생각나는건, 특정 api 요청 전에 반드시 csrf token 발급을 요청하고, 그 발급받은 token을 api요청에 header 쪽에 넣어서 보내서 검증하는 방식인것 같습니다만, 매 api 요청마다 처리해줘야하는 부분이라 다소 불편한 방식인 것 같네요..

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 흔들거북이님.

CSRF(크로스 사이트 요청 위조) 방어는 웹 애플리케이션 보안에서 중요한 요소입니다. 프론트엔드와 백엔드가 분리된 환경에서 CSRF를 처리하는 일반적인 방법 중 하나는 CSRF 토큰을 사용하는 방식입니다. 흔들거북이님이 언급한 것과 유사하게, CSRF 토큰을 발급받아 API 요청에 포함시키는 방식이 널리 사용됩니다.

일반적인 처리 방식은 다음과 같습니다:

  1. 토큰 발급: 클라이언트가 애플리케이션에 처음 접속할 때, 서버는 CSRF 토큰을 생성하여 클라이언트에게 전달합니다. 이 토큰은 세션 또는 쿠키에 저장될 수 있습니다.

  2. 토큰 저장: 클라이언트 측에서는 로컬 스토리지나 세션 스토리지에 이 토큰을 저장하여 이후 요청 시 사용할 수 있도록 합니다.

  3. 요청 시 토큰 포함: 클라이언트는 API 요청 시 이 CSRF 토큰을 HTTP 헤더에 포함시킵니다. 일반적으로 'X-CSRF-Token' 같은 커스텀 헤더로 사용합니다.

  4. 서버에서 검증: 서버는 수신한 요청의 헤더에 포함된 CSRF 토큰을 검증하여 그 유효성과 매칭 여부를 확인합니다.

이 방법은 보안성을 제공하지만, 언급한 대로 매 요청마다 토큰을 포함해야 하는 불편함이 있습니다. 그러나 최근에는 더 나은 사용성을 제공하기 위해 SameSite 쿠키 옵션을 활용하여 CSRF 방어를 강화하는 방법도 사용됩니다. 이는 브라우저의 설정을 통해 CSRF를 줄이는 방법입니다. 그러나, 모든 상황에서 대체될 수는 없으며, CSRF 방어에 대한 이해와 적절한 조합이 필요합니다.

강의에서 제공한 개념을 바탕으로, 추가적인 보호 방법을 검토하는 것도 권장 드립니다. 백엔드 보안 기초에 대한 강좌에서 제공하는 자료에서도 보안 기법에 대한 응용과 토의가 가능하니 참고해 보세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

흔들거북이님의 프로필 이미지
흔들거북이

작성한 질문수

질문하기