0Pricing
PHP Academy · 강의

CSRF 보호

위조된 요청을 방지하도록 폼에서 CSRF 토큰을 생성하고 검증합니다.

CSRF 보호은(는) CoddyKit의 무료 PHP Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 PHP Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. PHP Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

CSRF란 무엇입니까?

사이트 간 요청 위조(CSRF)는 인증된 사용자가 원하지 않는 작업을 제출하도록 속이는 공격입니다. 악성 페이지가 피해자의 활성 세션을 사용하여 사이트에 위조된 요청을 보냅니다.

CSRF 작동 방식

상황: Alice가 bank.com에 로그인되어 있습니다. Alice는 세션 쿠키를 사용하여 bank.com에 전송 요청을 자동으로 제출하는 숨겨진 폼이 있는 malicious.com을 방문합니다.

CSRF 토큰

방어 방법은 모든 폼에 삽입하는 세션별 비밀 토큰입니다. 서버는 POST/PUT/PATCH/DELETE 요청에서 토큰을 검증하므로 다른 출처에서 보낸 위조 요청은 토큰을 읽을 수 없습니다.

Laravel Blade의 @csrf

데이터를 변경하는 모든 HTML 폼에 @csrf 지시문을 추가합니다.

<form method="POST" action="/transfer">
    @csrf
    <input name="amount" type="number">
    <button>Transfer</button>
</form>

CSRF 미들웨어

Laravel의 VerifyCsrfToken 미들웨어는 web 미들웨어 그룹의 모든 GET이 아닌 요청에서 X-CSRF-TOKEN 헤더 또는 _token 필드를 확인합니다.

AJAX용 CSRF

AJAX 요청에서는 메타 태그에서 토큰을 읽어 헤더로 전송합니다.

// In the HTML head:
<meta name="csrf-token" content="{{ csrf_token() }}">

// In JavaScript (Axios):
axios.defaults.headers.common["X-CSRF-TOKEN"] =
    document.querySelector("meta[name=csrf-token]").content;

경로 제외

API 경로는 일반적으로 쿠키 대신 토큰 기반 인증을 사용하므로 CSRF 보호에서 제외합니다(Sanctum 토큰 사용).

<?php
// In VerifyCsrfToken $except:
protected $except = [
    "api/*",
    "webhooks/*",
];

SameSite 쿠키 속성

최신 브라우저에서는 세션 쿠키에 SameSite=Strict 또는 Lax를 설정하여 CSRF 방어 계층을 추가할 수 있습니다.

이중 제출 쿠키 패턴

API를 위한 대체 CSRF 방어 방법입니다. 토큰을 쿠키와 요청 헤더에 모두 전송합니다. 서버는 두 값이 일치하는지 확인하며, 교차 출처 요청은 쿠키를 읽을 수 없습니다.

API 환경에서의 CSRF

Bearer 토큰(Sanctum, JWT)으로 인증하는 REST API는 토큰이 localStorage에 저장되고 브라우저가 자동으로 전송하지 않으므로 CSRF에 취약하지 않습니다.

CSRF 테스트

Laravel 테스트 도우미는 CSRF 토큰을 자동으로 포함합니다. 보호되지 않은 POST 요청이 거부되는지도 테스트할 수 있습니다.

<?php
// With token:
$this->post("/transfer", ["_token" => csrf_token(), "amount" => 100]);
// Simulating CSRF attack (no token):
$this->withoutMiddleware(VerifyCsrfToken::class)->post("/transfer", [...]);

요약

CSRF 보호를 위해서는 상태를 변경하는 모든 폼에 숨겨진 토큰이 필요합니다. Laravel은 @csrf를 사용하여 이 작업을 자동으로 처리합니다. AJAX에서는 토큰을 HTTP 헤더로 추가합니다. Bearer 토큰을 사용하는 API 경로는 영향을 받지 않습니다.

빠른 확인

Laravel Blade 폼에 CSRF 보호를 추가하려면 어떻게 해야 합니까?

자주 묻는 질문

“CSRF 보호” 강의는 무료인가요?

네 — “CSRF 보호” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 PHP Academy 강의 전체를 잠금 해제할 수 있습니다. PHP Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“CSRF 보호”에서 뭘 배우나요?

위조된 요청을 방지하도록 폼에서 CSRF 토큰을 생성하고 검증합니다. 브라우저에서 직접 실행하는 실습 코드로 PHP Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

PHP Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 PHP Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“CSRF 보호” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 PHP Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 PHP Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 사이트 간 스크립팅(XSS) 방지
  2. SQL 삽입 및 매개변수화된 쿼리
  3. CSRF 보호
  4. 안전한 비밀번호 저장
← PHP Academy(으)로 돌아가기