>백엔드 개발 >PHP 튜토리얼 >PHP에서 CSRF(교차 사이트 요청 위조) 공격을 방지하려면 어떻게 해야 합니까?

PHP에서 CSRF(교차 사이트 요청 위조) 공격을 방지하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-02 16:37:11651검색

How Can I Prevent Cross-Site Request Forgery (CSRF) Attacks in PHP?

PHP에서 CSRF 방지

교차 사이트 요청 위조(CSRF)는 악성 웹 사이트가 사용자를 대신하여 합법적인 웹 사이트에 요청을 보내는 공격 유형입니다. 인증된 사용자. 이를 통해 공격자는 비밀번호 변경, 사기 구매 등 사용자가 의도하지 않은 작업을 실행할 수 있습니다.

CSRF 공격 완화

예방하는 데 사용할 수 있는 몇 가지 기술이 있습니다. 다음을 포함한 PHP의 CSRF 공격:

1. 쿠키뿐만 아니라 GET 및 POST 매개변수에도 인증 요구

이 조치는 GET 및 POST 매개변수 모두에 유효한 인증 토큰이 있어야 함을 통해 인증된 사용자를 대신하여 요청을 보내는 악의적인 웹사이트의 능력을 제한합니다. 요청의 POST 매개변수

2. HTTP Referer 헤더 확인

HTTP Referer 헤더에는 현재 페이지를 참조한 페이지의 URL이 포함되어 있습니다. Referer 헤더를 확인하면 요청이 합법적인 소스에서 왔는지 아니면 악의적인 웹사이트에서 왔는지 감지할 수 있습니다.

Kohana PHP 프레임워크 구현

GET 및 POST 유효성 검사 매개변수

Kohana에서는 Valid::not_empty() 규칙을 사용하여 GET 및 POST를 검증할 수 있습니다. 비어 있지 않은지 확인하는 매개변수입니다. 예:

$rules = array(
    'get_param' => array(
        array('not_empty')
    ),
    'post_param' => array(
        array('not_empty')
    )
);
$validation = Validation::factory($request->query() + $request->post())
    ->rules($rules);
if (!$validation->check()) {
    // CSRF attack detected
}

HTTP 리퍼러 헤더 확인

Kohana에서는 Request::referrer() 메소드를 사용하여 참조 URL을 가져올 수 있습니다. 페이지. Referer 헤더가 유효한지 확인하려면 예상 값과 비교할 수 있습니다.

$referrer = $request->referrer();
if ($referrer !== $expected_referrer) {
    // CSRF attack detected
}

일회성 토큰 사용

가장 효과적인 방법 CSRF 공격을 방지하는 것은 일회성 토큰을 사용하는 것입니다. 이 토큰은 서버에서 생성되어 세션에 저장됩니다. 사용자가 양식을 제출하면 토큰이 요청에 포함됩니다. 그런 다음 서버는 토큰을 확인하고 토큰이 유효한 경우 요청을 완료합니다.

Kohana에서 일회성 토큰을 구현하려면 다음 단계를 사용할 수 있습니다.

  1. 생성 임의의 토큰을 생성하여 세션에 저장합니다.
  2. 사용자가 원하는 형식으로 토큰을 포함합니다. 제출합니다.
  3. 요청을 완료하기 전에 서버 측에서 토큰을 확인하세요.

위 내용은 PHP에서 CSRF(교차 사이트 요청 위조) 공격을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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