>백엔드 개발 >PHP 튜토리얼 >PHP 시작하기: 사이트 간 요청 위조(CSRF)

PHP 시작하기: 사이트 간 요청 위조(CSRF)

PHPz
PHPz원래의
2023-05-21 08:06:05947검색

PHP는 웹 개발에 널리 사용되는 오픈 소스 스크립팅 언어입니다. 그러나 사이버 범죄가 증가함에 따라 보안은 웹 애플리케이션 설계에 있어 중요한 고려 사항 중 하나가 되었습니다. 크로스 사이트 요청 위조(CSRF) 공격은 일반적인 네트워크 보안 취약점 중 하나입니다. 이 문서는 PHP 초보자를 위한 CSRF 소개 가이드를 제공하는 것을 목표로 합니다.

CSRF 공격은 브라우저에 존재하는 신뢰 관계를 악용하여 사용자 요청을 위조하는 공격입니다. 이 공격은 일반적으로 사용자가 악의적이거나 승인되지 않은 웹사이트를 방문할 때 발생합니다. 공격자는 악성 웹사이트에 일부 가짜 HTML 양식을 삽입하고 해당 양식의 작업 주소를 피해자가 신뢰하는 웹사이트로 설정합니다. 사용자가 속아서 양식을 제출하면 브라우저는 피해자의 쿠키가 포함된 요청을 신뢰할 수 있는 웹사이트에 자동으로 보내 공격을 시작합니다. 공격자는 이러한 방식으로 스팸 게시, 사용자 비밀번호 변경, 자신도 모르는 사이에 사용자를 블랙리스트에 추가하는 등 다양한 악의적인 작업을 수행할 수 있습니다.

PHP에서 CSRF 공격을 방지하는 가장 좋은 방법은 토큰 확인 메커니즘을 사용하는 것입니다. 이 메커니즘을 통해 애플리케이션은 고유한 무작위 토큰 값을 생성하고 이를 모든 HTML 양식에 포함하며 양식 제출 시 값의 유효성을 검사할 수 있습니다. 만료된 토큰 값이 제출되면 애플리케이션은 요청을 거부하고 사용자에게 재인증하라는 메시지를 표시해야 합니다.

다음은 CSRF 공격을 방지하기 위해 토큰 확인 메커니즘을 구현하는 방법을 보여주는 기본 PHP 코드 예제입니다.

<?php
// 生成token值
$token = md5(uniqid(mt_rand(), true));

// 将token存储到SESSION变量中
$_SESSION['csrf_token'] = $token;

// 将token值嵌入到HTML表单中
echo '<form action="process_form.php" method="POST">';
echo '<label for="username">Username:</label>';
echo '<input type="text" id="username" name="username">';
echo '<label for="password">Password:</label>';
echo '<input type="password" id="password" name="password">';
echo '<input type="hidden" name="csrf_token" value="' . $token . '">';
echo '<input type="submit" value="Submit">';
echo '</form>';

// 处理表单数据并验证token值
if(isset($_POST['username']) && isset($_POST['password'])) {
    // 验证token值
    if($_POST['csrf_token'] == $_SESSION['csrf_token']) {
        // 处理表单数据
        $username = $_POST['username'];
        $password = $_POST['password'];
        // ...
    } else {
        echo 'Invalid token value. Please try again.';
    }
}
?>

코드 구현에서 먼저 md5(uniqid(mt_rand(), true)) 함수를 통해 임의의 토큰 값을 생성하고 이를 SESSION 변수에 저장한 다음 이는 HTML 양식에 포함됩니다. 양식 데이터가 제출되면 애플리케이션은 POST 요청의 토큰 값이 SESSION의 토큰 값과 일치하는지 확인합니다. 일치하는 항목이 있으면 양식 데이터 제출이 허용되고, 그렇지 않으면 요청이 거부되고 사용자에게 재인증하라는 메시지가 표시됩니다.

물론 실제 애플리케이션에는 디지털 서명을 사용하여 각 양식 요청을 확인하는 등 다른 CSRF 방어 기술이 있습니다. 그러나 위의 토큰 확인 메커니즘은 간단하고 효과적인 방법이며 PHP 개발에 권장할 가치가 있습니다.

요컨대 CSRF 공격은 일반적이고 위험한 네트워크 보안 취약점입니다. PHP 애플리케이션 디자이너는 이러한 유형의 공격으로부터 애플리케이션을 보호하기 위해 모범 사례를 따라야 합니다. 간단하면서도 효과적인 방법은 토큰 확인 메커니즘을 사용하여 각 양식 요청이 신뢰할 수 있는 사용자에 의해 시작되었는지 확인하는 것입니다.

위 내용은 PHP 시작하기: 사이트 간 요청 위조(CSRF)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.