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 중국어 웹사이트의 기타 관련 기사를 참조하세요!