사이트 간 요청 위조(CSRF)
CSRF 공격이 인증된 요청을 위조하는 방식을 배우고 CSRF 토큰과 SameSite 쿠키로 방어해보세요.
사이트 간 요청 위조(CSRF)은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
CSRF란 무엇인가요
사이트 간 요청 위조(CSRF)는 인증된 사용자의 브라우저가 웹 애플리케이션에 승인되지 않은 요청을 보내도록 속이는 공격입니다. 브라우저는 요청과 함께 쿠키를 자동으로 전송하므로, 서버는 추가 조치 없이는 정상 요청과 위조 요청을 구분할 수 없습니다.
CSRF 작동 방식
시나리오:
- 피해자가 bank.com에 로그인한 상태입니다(브라우저에 세션 쿠키가 있음).
- 피해자가 다음 코드가 있는 공격자의 페이지를 방문합니다:
<img src="https://bank.com/transfer?to=attacker&amount=1000"> - 브라우저가 bank.com 쿠키를 첨부하여 GET 요청을 보냅니다.
- 은행이 송금을 처리합니다.
POST 요청을 이용한 CSRF
POST를 이용한 CSRF에는 양식이 필요합니다:
<form action="https://bank.com/transfer" method="POST" id="f">
<input name="to" value="attacker">
<input name="amount" value="1000">
</form>
<script>document.getElementById("f").submit()</script>CSRF 토큰
가장 중요한 방어 방법은 CSRF 토큰입니다. CSRF 토큰은 양식에 삽입되는 무작위의 비밀 값으로, 세션별 또는 요청별로 생성됩니다. 서버는 상태를 변경하는 모든 요청에서 토큰을 검증합니다. 다른 도메인의 공격자는 토큰을 읽을 수 없습니다(동일 출처 정책).
SameSite 쿠키 속성
SameSite=Strict: 사이트 간 요청에는 쿠키가 전혀 전송되지 않습니다. SameSite=Lax: 안전한 최상위 탐색(링크)에서는 쿠키가 전송되지만 다른 사이트에서 보내는 POST에는 전송되지 않습니다. 최신 브라우저는 기본값으로 Lax를 사용하므로 CSRF 위험이 크게 줄어듭니다.
이중 제출 쿠키 패턴
서버 측 토큰 저장의 대안으로, 무작위 CSRF 쿠키를 설정하고 이 쿠키를 요청 매개변수로도 제출하도록 요구합니다. 공격자는 쿠키를 읽을 수 없으므로(동일 출처) 양식 데이터에 동일한 값을 넣을 수 없습니다.
사용자 지정 요청 헤더
AJAX 요청에 사용자 지정 헤더(예: X-Requested-With: XMLHttpRequest)를 요구하면 CSRF를 방어할 수 있습니다. 브라우저는 사이트 간 스크립트가 임의의 헤더를 설정하지 못하도록 차단하기 때문입니다(CORS가 이를 적용합니다).
CSRF 토큰만으로 충분하지 않은 경우
다음과 같은 경우 CSRF 토큰이 무력화됩니다:
- XSS가 존재하는 경우 — 공격자가 JavaScript를 통해 토큰을 읽을 수 있습니다.
- 토큰이 URL에 노출된 경우(Referer 헤더)
- 토큰을 예측할 수 있거나 재사용하는 경우
- CORS가 공격자의 출처를 허용하도록 잘못 구성된 경우
CSRF 테스트
테스트 단계:
- 상태를 변경하는 요청 식별(POST, PUT, DELETE)
- CSRF 토큰을 제거하거나 수정한 후 다시 제출
- 사이트 간 양식 제출을 작성하여 성공하는지 확인
- 세션 쿠키의 SameSite 속성 확인
API에서의 CSRF
JSON을 사용하는 REST API는 다음 조건을 충족하면 CSRF의 영향을 받지 않는 경우가 많습니다:
Content-Type: application/json을 요구합니다(HTML 양식에서는 이를 설정할 수 없음).- 토큰 기반 인증을 사용합니다(쿠키가 아닌 Authorization 헤더).
하지만 쿠키를 허용하는 API는 여전히 CSRF 방어를 구현해야 합니다.
최신 CSRF 환경
Chrome, Firefox, Safari에서 SameSite=Lax가 기본값으로 사용되면서 기존의 많은 CSRF 공격이 차단됩니다. 그러나 하위 도메인을 이용한 공격과 특정 탐색 방식은 여전히 Lax를 우회할 수 있습니다. 강력한 방어를 위해 SameSite와 CSRF 토큰을 함께 사용하십시오.
빠른 확인: CSRF
웹 애플리케이션에서 CSRF 공격에 대한 가장 중요한 방어 방법은 무엇인가요?
수업 요약
CSRF는 브라우저가 쿠키를 요청에 자동으로 첨부하는 동작을 악용하여 악성 사이트에서 인증된 요청을 위조합니다. 가장 중요한 방어 방법은 서버 측에서 검증하는 CSRF 토큰입니다. 보조 방어 방법은 SameSite=Strict/Lax 쿠키 속성입니다. 쿠키가 아닌 헤더의 토큰 인증을 사용하는 API는 본질적으로 CSRF에 강합니다. 방어 방법을 함께 사용하십시오. XSS가 존재하면 CSRF 토큰을 우회할 수 있습니다.
AI 튜터와 함께 Cyber Security Academy을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 76
- 레슨
- 303
자주 묻는 질문
“사이트 간 요청 위조(CSRF)” 강의는 무료인가요?
네 — “사이트 간 요청 위조(CSRF)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“사이트 간 요청 위조(CSRF)”에서 뭘 배우나요?
CSRF 공격이 인증된 요청을 위조하는 방식을 배우고 CSRF 토큰과 SameSite 쿠키로 방어해보세요. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“사이트 간 요청 위조(CSRF)” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- SQL 인젝션: 작동 방식과 원리
- 사이트 간 스크립팅(XSS)
- 사이트 간 요청 위조(CSRF)
- 보안 구성 오류와 노출된 서비스