─━ IT ━─

CSRF 공격과 방어에 대한 자세한 예시 및 설명

DKel 2024. 11. 3. 16:46
반응형

CSRF(Cross-Site Request Forgery) 공격은 사용자가 의도하지 않은 요청을 신뢰할 수 있는 웹 애플리케이션에 전달하게 만들어 사용자 권한을 악용하는 웹 보안 취약점입니다. 이러한 공격을 방지하기 위해 다양한 전략들이 존재합니다. 아래에서는 CSRF 공격의 예시와 이를 방어하는 방법을 살펴보겠습니다.
 
### CSRF 공격 예시
 
CSRF 공격의 가장 단순한 예 중 하나는 사용자가 로그인을 한 상태에서 악의적인 웹사이트에 접속하게 되어, 그 사이트가 사용자의 브라우저로 하여금 자동으로 요청을 보내게 만드는 것입니다. 예를 들어, 사용자의 은행 계좌에서 돈을 송금하는 요청이 사용자의 승인 없이 이루어질 수 있습니다.
 
#### 예시 코드: 취약한 애플리케이션
 
아래는 CSRF 공격에 취약한 예시 코드입니다. 이는 사용자가 로그인한 상태에서 상태 변경 요청을 아무런 검증 없이 처리하는 웹 서버의 PHP 코드입니다.
 
```php
// transfer.php
session_start();
 
if ($_SESSION['logged_in']) {
    $amount = $_POST['amount'];
    $recipient = $_POST['recipient'];
 
    // 은행 계좌에서 돈 송금
    transferFunds($recipient, $amount);
    echo "돈이 송금되었습니다.";
}
```
 
### CSRF 방어 전략
 
CSRF 공격을 방지하기 위해서는 다양한 방어 전략을 사용할 수 있습니다. 가장 일반적인 방법은 CSRF 토큰을 사용하는 것입니다. CSRF 토큰은 각 사용자의 세션에 대해 생성되는 고유한 값을 포함하여 요청이 유효한지 확인합니다.
 
#### 방어 예시: CSRF 토큰 사용
 
아래는 CSRF 토큰을 통해 요청을 검증하는 방법을 포함한 예시 코드입니다.
 
```php
// index.php (폼을 렌더링할 때)
session_start();
if (!isset($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
 
$csrf_token = $_SESSION['csrf_token'];
?>
 
<form action="transfer.php" method="POST">
    <input type="hidden" name="csrf_token" value="<?php echo $csrf_token; ?>">
    <!-- 기타 폼 필드 -->
    <input type="text" name="amount">
    <input type="text" name="recipient">
    <button type="submit">송금</button>
</form>
```
 
```php
// transfer.php (폼 처리)
session_start();
 
if ($_SESSION['logged_in'] && $_POST['csrf_token'] == $_SESSION['csrf_token']) {
    $amount = $_POST['amount'];
    $recipient = $_POST['recipient'];
 
    // 은행 계좌에서 돈 송금
    transferFunds($recipient, $amount);
    echo "돈이 송금되었습니다.";
} else {
    // 요청이 유효하지 않음
    echo "요청이 유효하지 않습니다.";
}
```
 
위의 코드에서는 `$_SESSION['csrf_token']`을 사용하여 CSRF 토큰을 생성하고, 폼이 제출될 때마다 이를 검증합니다. 토큰이 일치하지 않으면 요청이 중단되어 CSRF 공격을 방지할 수 있습니다.
 
이 외에도 Double Submit Cookies, SameSite 쿠키 속성 사용, HTTP Referer 검증 등의 방법이 CSRF를 방지하는 데 사용될 수 있습니다. 각 방법은 사용 사례에 따라 장단점이 다르므로 상황에 맞는 방법을 적용하는 것이 중요합니다.

반응형