> 백엔드 개발 > PHP 문제 > PHP CSRF 보호 : CSRF 공격 방지 방법.

PHP CSRF 보호 : CSRF 공격 방지 방법.

James Robert Taylor
풀어 주다: 2025-03-25 15:05:46
원래의
833명이 탐색했습니다.

PHP CSRF 보호 : CSRF 공격 방지 방법

CSRF (Cross-Site Request Grospory) 공격은 사용자가 신뢰하는 웹 응용 프로그램에서 의도하지 않은 작업을 수행하도록 속이는 속임수이기 때문에 특히 위험 할 수 있습니다. PHP의 CSRF 공격을 방지하려면 다음을 수행 할 수 있습니다.

  1. CSRF 토큰 사용 : 각 사용자 세션에 대해 고유 한 토큰을 생성하고 상태 변경 작업을 트리거하는 모든 형태 로이 토큰을 포함시킵니다. 요청을 처리하기 전에 서버에서 토큰을 확인해야합니다.
  2. 동일한 사이트 쿠키 : 쿠키에 SameSite 속성을 사용하십시오. SameSite Strict 하거나 Lax 로 설정하면 쿠키가 크로스 오리핀 요청으로 전송되지 않도록 CSRF를 방지 할 수 있습니다.
  3. Double-Submit Cookie :이 방법에는 CSRF 토큰을 쿠키와 요청 매개 변수로 전송하는 것이 포함됩니다. 그런 다음 서버는 토큰 값이 일치하는지 확인합니다.
  4. 참조 헤더 점검 : 멍청하지는 않지만, 참조 헤더를 확인하면 추가 보호 계층을 제공 할 수 있습니다. 요청이 자신의 도메인에서 나옵니다.
  5. State 변경 작업에 Get을 사용하지 마십시오 . GET 요청을 다른 사이트에서 쉽게 트리거 할 수 있으므로 서버 상태를 변경하는 작업에 게시물을 사용하십시오.
  6. 적절한 세션 관리 구현 : 세션이 올바르게 관리되고 쿠키가 HttpOnlySecure 와 같은 적절한 보안 플래그로 설정되어 있는지 확인하십시오.

이러한 조치를 구현하면 PHP 응용 프로그램에 대한 CSRF 공격의 위험을 크게 줄일 수 있습니다.

PHP에서 CSRF 토큰을 구현하기위한 모범 사례는 무엇입니까?

PHP에서 효과적으로 CSRF 토큰 구현에는 몇 가지 모범 사례가 포함됩니다.

  1. 고유 한 토큰 생성 : 암호화 적으로 안전한 방법을 사용하여 토큰을 생성하십시오. PHP의 random_bytesbin2hex 기능을 사용하여 안전한 토큰을 만들 수 있습니다.

     <code class="php">$token = bin2hex(random_bytes(32));</code>
    로그인 후 복사
  2. 토큰을 안전하게 보관하십시오 : 사용자 세션이나 쿠키로 토큰을 저장하십시오. 세션을 사용하는 경우 세션 고정 공격이 방지됩니다.

     <code class="php">session_start(); $_SESSION['csrf_token'] = $token;</code>
    로그인 후 복사
  3. 양식에 토큰 포함 : 토큰을 숨겨진 입력 필드로 양식에 포함시킵니다.

     <code class="php"><input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($token); ?>"></code>
    로그인 후 복사
  4. 제출시 토큰 검증 : 저장된 값에 대한 양식 제출시 토큰을 확인하십시오.
  5. 토큰 재생 : 성공적인 양식 제출 후 또는 특정 기간 후에 공격 창을 줄이기 위해 토큰 재생 토큰을 고려하십시오.
  6. 모든 상태 변화 요청에 토큰 사용 : 기존 양식 제출뿐만 아니라 AJAX 호출도 서버 상태를 수정하는 모든 요청에 ​​CSRF 토큰을 포함시킵니다.
  7. 예측 가능한 토큰을 피하십시오 : 공격자가 토큰을 예측할 수 있거나 추측 할 수 없는지 확인하십시오.

이러한 관행에 따라 CSRF 보호 메커니즘의 무결성을 유지하는 데 도움이됩니다.

CSRF 보호를 위해 PHP 라이브러리를 추천 할 수 있습니까?

여러 PHP 라이브러리는 CSRF 보호의 구현을 단순화 할 수 있습니다.

  1. OWASP CSRFGUARD PHP : CSRF 보호를 위해 특별히 설계된 Open Web Application Security Project (OWASP)의 라이브러리. 토큰 생성, 검증 및 다양한 프레임 워크와의 통합을위한 강력한 메커니즘을 제공합니다.
  2. Symfony Security : Symfony 프레임 워크를 사용하는 경우 CSRF 보호 기능이 내장되어 있습니다. CsrfExtensionCsrfTokenManager 클래스는 CSRF 토큰 생성 및 검증에 대한 포괄적 인 지원을 제공합니다.
  3. LARAVEL : Laravel의 CSRF 보호는 구현하기가 간단합니다. 이 프레임 워크는 각 활성 사용자 세션에 대해 CSRF 토큰을 자동으로 생성하며 @csrf 블레이드 지시문을 통해 양식에 포함됩니다.
  4. Zend Framework : Zend Framework는 Zend\Validator\Csrf 구성 요소를 통해 CSRF 보호 기능을 제공하며, 이는 양식에 쉽게 통합 될 수 있습니다.
  5. AURA.WEB : CSRF 토큰 생성 및 검증을 제공하는 경량 라이브러리는 PHP 프로젝트에 사용하기에 적합합니다.

이러한 라이브러리 중 하나를 사용하면 개발 시간을 절약하고 응용 프로그램에서 강력한 CSRF 보호를 보장 할 수 있습니다.

PHP의 양식 제출에 대한 CSRF 토큰을 어떻게 검증합니까?

PHP의 양식 제출에서 CSRF 토큰 검증은 양식과 함께 보낸 토큰을 세션 또는 쿠키에 저장된 양식과 비교하는 것입니다. 단계별 가이드는 다음과 같습니다.

  1. 저장된 토큰 검색 : 세션이나 쿠키에 저장된 토큰에 액세스하십시오.

     <code class="php">session_start(); $storedToken = $_SESSION['csrf_token'];</code>
    로그인 후 복사
  2. 제출 된 토큰 검색 : 양식 제출물로 보낸 토큰을 얻습니다.

     <code class="php">$submittedToken = $_POST['csrf_token'];</code>
    로그인 후 복사
  3. 토큰 검증 : 저장된 토큰을 제출 된 토큰과 비교하십시오.

     <code class="php">if (!hash_equals($storedToken, $submittedToken)) { // Token mismatch, handle the error http_response_code(403); die("CSRF token validation failed"); }</code>
    로그인 후 복사
  4. 요청을 진행하십시오 . 토큰이 일치하는 경우 양식 데이터 처리를 진행하십시오.

     <code class="php">// Tokens match, proceed with the form submission // Process the form data here</code>
    로그인 후 복사
  5. 토큰 재생성 : 선택적으로, 보안을 강화하기 위해 성공적인 제출 후 토큰을 재생합니다.

     <code class="php">$newToken = bin2hex(random_bytes(32)); $_SESSION['csrf_token'] = $newToken;</code>
    로그인 후 복사

이 단계를 수행하면 CSRF 토큰이 올바르게 검증되어 CSRF 공격으로부터 응용 프로그램을 보호 할 수 있습니다.

위 내용은 PHP CSRF 보호 : CSRF 공격 방지 방법.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿