-
CSRF 공격이란? 🚨 웹 보안 위협과 방어 전략 완벽 정리!Developer 2025. 3. 4. 13:00728x90
1. CSRF란?
CSRF(Cross-Site Request Forgery, 사이트 간 요청 위조)는 공격자가 사용자를 속여 원하지 않는 요청을 특정 웹사이트에 실행하도록 유도하는 공격 기법입니다.
✅ 쉽게 말해?
- 사용자가 로그인된 상태에서, 공격자가 악의적인 요청을 사용자 모르게 실행하도록 유도
- 보통 인증된 세션(cookie, 토큰 등)을 이용해 공격
- 결과적으로 사용자의 개인정보 탈취, 계좌 이체, 비밀번호 변경 등의 피해 발생 가능
2. CSRF 공격 방식 🔥
CSRF 공격은 보통 피싱, 악성 링크, 자동 스크립트 실행 등을 통해 수행됩니다.
📌 CSRF 공격 시나리오 예제
1️⃣ 사용자가 A 은행 사이트에 로그인하고 세션이 유지된 상태 🔐 2️⃣ 공격자는 피싱 이메일이나 악성 웹사이트를 통해 사용자가 특정 URL을 클릭하도록 유도 🎯 3️⃣ 사용자가 클릭하면, A 은행 사이트에 사용자의 세션을 이용한 요청이 자동 실행됨 💥
✅ 악성 요청 예제 (GET 요청 기반 CSRF)
<img src="https://bank.com/transfer?amount=100000&to=attacker" />
사용자가 페이지를 방문하는 순간, 자동으로 계좌 이체가 실행될 수 있음! 😱
✅ POST 요청 기반 CSRF (자동 실행 스크립트 활용)
<form action="https://bank.com/change-password" method="POST"> <input type="hidden" name="new_password" value="hacked123"> <input type="submit" /> </form> <script> document.forms[0].submit(); // 자동으로 폼 제출 실행 </script>
📌 사용자가 모르게 비밀번호가 변경될 수 있음!
3. CSRF와 XSS의 차이점 ⚖️
공격 방식 CSRF XSS 초점 사용자의 인증된 세션을 악용 웹사이트에 악성 스크립트 삽입 공격 목표 사용자가 원하지 않는 요청을 실행하도록 함 사용자 브라우저에서 데이터를 훔치거나 조작 피해 유형 계좌 이체, 비밀번호 변경, 개인 정보 수정 등 쿠키 탈취, 세션 하이재킹, 피싱 공격 등 방어 방법 CSRF 토큰, SameSite 쿠키 등 CSP(Content Security Policy), 입력 값 검증 ✅ 결론: CSRF는 사용자의 신뢰를 악용, XSS는 웹사이트의 취약점을 악용
4. CSRF 방어 방법 🔒
CSRF를 방어하기 위한 주요 보안 전략을 알아봅시다!
✅ 1) CSRF 토큰 사용 (Recommended ✅)
- 서버에서 난수 기반의 CSRF 토큰을 생성하여 요청 시 함께 전송
- 서버에서 요청이 올 때마다 토큰이 유효한지 검증
<input type="hidden" name="csrf_token" value="random_secure_token">
📌 프레임워크에서 CSRF 토큰 기본 지원
- Django: csrf_protect
- Spring Security: @EnableCsrf
- Express.js: csurf 미들웨어
✅ 2) SameSite 속성을 이용한 보안 쿠키 설정
- SameSite 쿠키를 설정하여, 다른 사이트에서 요청을 보낼 수 없도록 방지
document.cookie = "sessionId=abcd1234; Secure; HttpOnly; SameSite=Strict";
✅ Strict 모드: 다른 도메인에서 요청 시 쿠키를 전송하지 않음 ✅ Lax 모드: 일부 안전한 GET 요청에서만 쿠키를 전송
✅ 3) CORS 정책 강화
- 신뢰할 수 있는 도메인에서만 요청을 허용하도록 CORS 정책을 적용
app.use((req, res, next) => { res.setHeader("Access-Control-Allow-Origin", "https://trusteddomain.com"); next(); });
✅ 4) HTTP Referer 헤더 검증
- 요청이 올 때 Referer 헤더를 확인하여, 신뢰할 수 있는 출처에서 온 요청인지 검증
if (!req.headers.referer || !req.headers.referer.startsWith("https://trusted.com")) { res.status(403).send("Forbidden"); }
🚨 주의: 일부 브라우저는 Referer 정보를 숨길 수 있음!
5. CSRF 방어 전략 비교 📌
방어 방법 적용 방식 보안 수준 CSRF 토큰 요청마다 검증 토큰 사용 🔥 매우 강력 SameSite 쿠키 쿠키에 SameSite 속성 추가 👍 강력 CORS 정책 강화 신뢰할 수 있는 도메인만 허용 🙂 중간 Referer 헤더 검증 요청 출처 확인 ⚠️ 보완 필요 ✅ 결론: CSRF 토큰 + SameSite 쿠키 조합이 가장 안전함! 🔥
6. 결론 🎯
✅ CSRF는 사용자의 세션을 악용하는 보안 공격으로, 비밀번호 변경, 계좌 이체 등의 피해를 유발할 수 있음.
✅ 방어 방법으로 CSRF 토큰, SameSite 쿠키, CORS 정책 등을 활용하여 보안을 강화해야 함.
✅ 최상의 보안은 여러 개의 방어 기법을 조합하여 적용하는 것! 🔥👉 이제 CSRF 공격을 예방하는 강력한 보안 시스템을 구축해 보세요! 🚀
✅ 추천 키워드 (SEO 최적화)
- CSRF 공격이란?
- CSRF 방어 방법
- 사이트 간 요청 위조 예제
- CSRF vs XSS 차이
- SameSite 쿠키 설정 방법
- CSRF 토큰 적용하기
- 웹 보안 CSRF 공격 방어법
- CORS와 CSRF 차이
- Express.js CSRF 미들웨어 설정
- Spring Security CSRF 보호 적용
728x90'Developer' 카테고리의 다른 글
JWT란? 🚀 특징과 보안 주의사항 완벽 정리! (1) 2025.03.19 Virtual DOM이란? 🚀 리액트가 빠른 이유! (0) 2025.03.18 CORS 없이 SOP를 우회하는 방법 🚀 안전하고 합법적인 우회 전략! (1) 2025.02.28 이미지 포맷 완벽 가이드 🚀 JPG, PNG, WebP, AVIF 차이점 한눈에 정리! (0) 2025.02.26 자바스크립트 프로토타입 상속이란? 🚀 쉽게 이해하는 객체지향의 비밀! (2) 2025.02.25