라라벨 - CSRF 보호

안녕하세요, 성장하는 개발자 여러분! 오늘 우리는 라라벨에서 CSRF 보호의 세계로 뛰어들어 볼 거예요. 프로그래밍에 새로운 사람이라면 걱정하지 마세요; 저는 여러분을 단계별로 안내해 드릴 테니까요. 제가 여러 해 동안 가르쳐온 수많은 학생들에게 했던 것처럼 말이죠. 이 흥미로운 여정을 함께 시작해 보세요!

Laravel - CSRF Protection

CSRF는 무엇인가요?

라라벨의 구현에 이전에 이해해 보겠습니다. CSRF는 Cross-Site Request Forgery의 약자입니다. 커피숍에서 라떼를 즐기며 랩톱으로 은행 계좌를 확인 중인 상상해 보세요. 갑자기 인근에 앉아 있는 악의적인 해커가 브라우저를 속여 계좌에서 돈을 이체하려는 요청을 만들어낸다고 가정해 봅시다. 이게 바로 CSRF입니다!

CSRF 보호가 왜 중요한가요?

CSRF 공격은 참으로 무서운 일입니다. 인증된 사용자 대신 불법적인 행동을 수행할 수 있습니다. 커피숍 시나리오에서 여러분이 손해를 보게 될 수 있습니다! 그래서 우리는 CSRF 보호가 필요하며, 라라벨은 우리를 지켜줍니다.

라라벨의 CSRF 보호 구현

라라벨은 애플리케이션을 CSRF 공격으로부터 매우 쉽게 보호할 수 있도록 합니다. 어떻게 작동하는지 탐구해 보겠습니다.

CSRF 토큰

라라벨의 CSRF 보호의 핵심은 고유한 토큰입니다. 이 토큰은 애플리케이션과 사용자 브라우저 간의 비밀 악수라고 생각해 보세요.

다음은 폼에 이 토큰을 포함하는 방법입니다:

<form method="POST" action="/profile">
@csrf
...
</form>

@csrf 디렉티브는 CSRF 토큰을 포함한 숨겨진 입력 필드를 생성합니다. 폼에 비밀 비밀번호를 주는 것과 같습니다!

CSRF 검증 미들웨어

라라벨은 POST, PUT, PATCH, 또는 DELETE 요청에 대해 CSRF 토큰을 검증하는 미들웨어를 사용합니다. 클럽 입구에서 신분증을 확인하는 보안 경비원과 같은 역할을 합니다.

다음은 백그라운드에서 작동하는 미들웨어입니다:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}

이 미들웨어는 모든 웹 라우트에 자동으로 적용됩니다. 애플리케이션을 보호하는 보이지 않는 방패와 같습니다!

CSRF 보호에서 제외할 URL

occasionally, you might want certain URLs to bypass CSRF protection. For example, if you're building an API that other applications will use. You can exclude these URLs by adding them to the $except array in the VerifyCsrfToken middleware:

protected $except = [
'api/*',
'webhook/*',
];

이는 특정 VIP에게 클럽 입구에서 보안 검사를 건너뛰게 하는 것과 같습니다.

X-CSRF-TOKEN

AJAX 요청을 위해 라라벨은 CSRF 토큰을 X-CSRF-TOKEN이라는 사용자 정의 HTTP 헤더로 보낼 수 있도록 합니다. 다음은 설정 방법입니다:

<meta name="csrf-token" content="{{ csrf_token() }}">

그런 다음, JavaScript에서 (jQuery를 예로 들어):

$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

이는 AJAX 요청에 특별한 배지를 주는 것과 같습니다!

X-XSRF-TOKEN

라라벨은 또한 XSRF-TOKEN이라는 쿠키에 CSRF 토큰을 설정합니다. Angular와 같은 많은 JavaScript 프레임워크는 자동으로 이 쿠키를 사용합니다.

이 프레임워크를 사용하지 않는 경우 수동으로 토큰을 보낼 수 있습니다:

var token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

이는 애플리케이션에 비밀 디코더 링을 주는 것과 같습니다!

CSRF 보호 방법

다음은 논의한 CSRF 보호 방법을 요약한 표입니다:

방법 설명
@csrf 디렉티브 CSRF 토큰을 포함한 숨겨진 입력 필드를 생성합니다
VerifyCsrfToken 미들웨어 POST, PUT, PATCH, DELETE 요청에 대해 CSRF 토큰을 자동으로 검증합니다
X-CSRF-TOKEN 헤더 AJAX 요청에 CSRF 토큰을 사용자 정의 HTTP 헤더로 보냅니다
XSRF-TOKEN 쿠키 CSRF 토큰을 쿠키에 설정하여 JavaScript 프레임워크가 사용할 수 있게 합니다

결론

그렇게 해서 여러분, 미래의 코딩 마법사 여러분! 우리는 라라벨의 CSRF 보호 세계를 여행했습니다. 애플리케이션을 보호하는 것이 중요하다는 것을 기억하세요. 라라벨은 이를 매우 쉽게 만들어 줍니다.

제가 항상 학생들에게 말하는 것처럼, CSRF 보호는 가장 핫한 클럽에서 보안 경비원과 같습니다. 인증된 요청만 통과하도록 보장하여 애플리케이션이 악의적인 침입자로부터 안전하게 유지됩니다.

계속 연습하고, 호기심을 유지하면, 얼마 지나지 않아 프로처럼 안전한 라라벨 애플리케이션을 만드는 것을 배울 것입니다! 행복하게 코딩하세요!

Credits: Image by storyset