minstudio

보안: CSRF 방지 및 데이터 필터링

웹 애플리케이션은 항상 해커의 공격 대상이 됩니다. 특히 XSS(크로스 사이트 스크립팅) 공격을 막기 위해 입력 데이터를 필터링하고, CSRF(사이트 간 요청 위조) 공격을 막기 위해 보안 토큰을 발급하여 방어막을 구축해야 합니다.

🛡️ CSRF 공격과 방어 메커니즘

🦹‍♂️
해커 사이트

"몰래 돈을 송금해라!"
(가짜 폼 전송)

➡️ ❌
🛡️
CSRF 미들웨어

"요청에 우리 서버가 발급한
CSRF 암호 토큰이 없군. 차단!"

bash
// composer require slim/csrf

use Slim\Csrf\Guard;

// 1. CSRF 보호 미들웨어 생성
$responseFactory = $app->getResponseFactory();
$csrf = new Guard($responseFactory);

// 앱 전체에 CSRF 방어막 장착!
$app->add($csrf);

$app->get('/form', function ($request, $response) {
    // 2. 폼을 그릴 때, CSRF 미들웨어가 만들어둔 암호 토큰을 가져옴
    $nameKey = $request->getAttribute('csrf_name');
    $valueKey = $request->getAttribute('csrf_value');

    // 3. HTML 폼 안에 몰래 숨겨서(hidden) 보냄
    $form = "
        <form method='POST' action='/submit'>
            <input type='hidden' name='csrf_name' value='{$nameKey}'>
            <input type='hidden' name='csrf_value' value='{$valueKey}'>
            <input type='text' name='username'>
            <button type='submit'>제출</button>
        </form>
    ";
    
    $response->getBody()->write($form);
    return $response;
});

// 해커가 외부에서 POST 요청을 강제로 쏴도,
// CSRF 토큰이 없거나 일치하지 않으면 미들웨어가 알아서 400 에러를 뱉고 막아줍니다.
보안: CSRF 방지 및 데이터 필터링 | Minstudio