ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CSRF 공격이란? 🚨 웹 보안 위협과 방어 전략 완벽 정리!
    Developer 2025. 3. 4. 13:00
    728x90

    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 최적화)

    1. CSRF 공격이란?
    2. CSRF 방어 방법
    3. 사이트 간 요청 위조 예제
    4. CSRF vs XSS 차이
    5. SameSite 쿠키 설정 방법
    6. CSRF 토큰 적용하기
    7. 웹 보안 CSRF 공격 방어법
    8. CORS와 CSRF 차이
    9. Express.js CSRF 미들웨어 설정
    10. Spring Security CSRF 보호 적용
    728x90
Designed by Tistory.