>백엔드 개발 >PHP 튜토리얼 >PHP를 사용하여 CSRF 공격으로부터 웹 양식을 어떻게 보호할 수 있습니까?

PHP를 사용하여 CSRF 공격으로부터 웹 양식을 어떻게 보호할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-09 05:37:14924검색

How Can I Secure My Web Forms Against CSRF Attacks Using PHP?

CSRF 토큰을 사용한 웹 양식 보안: PHP 예제가 포함된 종합 가이드

교차 사이트 요청 위조(CSRF)는 악의적인 공격 기술입니다. 사용자를 대신하여 승인되지 않은 작업을 수행하기 위해 웹 취약점을 악용합니다. CSRF로부터 웹사이트를 보호하려면 강력한 토큰 메커니즘을 구현하는 것이 중요합니다. 이 문서에서는 PHP를 사용하여 CSRF 토큰을 추가하고 프로세스에서 직면하는 문제를 해결하는 방법에 대한 자세한 가이드를 제공합니다.

보안 토큰 생성

CSRF 토큰을 생성할 때 다음을 사용하는 것이 필수적입니다. 예측 가능성을 방지하고 충분한 엔트로피를 보장하는 신뢰할 수 있는 무작위 소스입니다. PHP 7은 random_bytes() 함수를 제공하는 반면, PHP 5.3은 이 목적으로 mcrypt_create_iv() 또는 openssl_random_pseudo_bytes()를 활용할 수 있습니다. rand() 또는 md5()와 같은 취약한 메소드를 피하십시오.

PHP 7의 예:

if (empty($_SESSION['token'])) {
    $_SESSION['token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['token'];

PHP 5.3의 예(또는 ext-mcrypt):

if (empty($_SESSION['token'])) {
    if (function_exists('mcrypt_create_iv')) {
        $_SESSION['token'] = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
    } else {
        $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32));
    }
}
$token = $_SESSION['token'];

양식과 통합

HTML 양식에 입력 필드를 포함시켜 생성된 CSRF 토큰을 안전하게 서버:

<input type="hidden" name="token" value="<?php echo $token; ?>" />

토큰 확인

양식이 제출되면 제출된 토큰을 세션에 저장된 토큰으로 확인하세요.

if (!empty($_POST['token'])) {
    if (hash_equals($_SESSION['token'], $_POST['token'])) {
         // Proceed to process the form data
    } else {
         // Log this as a warning and keep an eye on these attempts
    }
}

양식별 토큰 및 HMAC

보안을 강화하려면 양식별 토큰 사용을 고려하세요. 별도의 HMAC 키를 생성하고 hash_hmac()을 사용하여 CSRF 토큰을 특정 형식으로 잠급니다.

$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
if (hash_equals($calc, $_POST['token'])) {
    // Continue...
}

Twig를 사용한 하이브리드 접근 방식

Twig 사용자는 일반 및 잠김을 모두 생성하는 사용자 정의 기능 토큰:

{{ form_token() }}
{{ form_token('/my_form.php') }}

일회용 CSRF 토큰

일회용 토큰이 필요한 시나리오의 경우 Paragon Initiative Enterprises의 Anti- 토큰 상환 및 만료를 관리하는 CSRF 라이브러리.

이러한 기술을 구현하면 다음이 가능합니다. CSRF 공격으로부터 웹사이트를 효과적으로 보호하고 사용자 상호 작용의 무결성을 보장하세요.

위 내용은 PHP를 사용하여 CSRF 공격으로부터 웹 양식을 어떻게 보호할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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