PHP에서 CSRF(교차 사이트 요청 위조) 공격을 처리하는 방법은 무엇입니까?

WBOY
풀어 주다: 2023-06-29 20:46:02
원래의
1005명이 탐색했습니다.

PHP에서 CSRF(교차 사이트 요청 위조) 공격을 처리하는 방법은 무엇입니까?

개요:
사이버 공격이 계속 진화함에 따라 웹사이트 보안을 보호하는 것이 개발자에게 중요한 작업 중 하나가 되었습니다. CSRF(교차 사이트 요청 위조) 공격은 일반적인 보안 위협입니다. 공격자는 사용자를 속여 예상치 못한 작업을 수행하도록 하여 사용자가 알지 못하는 사이에 악의적인 요청을 보낼 수 있도록 합니다. 이러한 공격을 방지하기 위해 개발자는 사이트를 보호하기 위해 여러 가지 조치를 취할 수 있습니다. 이 기사에서는 PHP에서 CSRF 공격을 처리하는 방법을 설명합니다.

  1. CSRF 공격의 원칙 이해:
    CSRF 공격을 다루기 전에 공격의 원칙을 이해해야 합니다. CSRF 공격은 다른 웹사이트에 로그인한 사용자 자격 증명을 활용하여 무단 작업을 수행하는 방식으로 수행됩니다. 공격자는 요청을 위조하여 대상 웹사이트로 보내며, 이는 사용자의 신원을 사용하여 실행됩니다. 웹사이트가 요청을 받은 후 해당 요청이 사용자 자신에 의해 전송된 것으로 잘못 판단하게 됩니다. 따라서 CSRF 공격을 효과적으로 방어하려면 이 원칙을 이해하는 것이 중요합니다.
  2. 토큰 확인 사용:
    토큰 확인은 CSRF 공격을 방어하는 일반적인 방법입니다. 이는 각 사용자에 대한 고유 식별자(토큰)를 생성하고 이 토큰을 양식에 포함하는 것을 기반으로 합니다. 사용자가 양식을 제출하면 서버는 양식의 토큰이 사용자 세션의 토큰과 일치하는지 확인합니다. 일관성이 없으면 이는 악의적인 요청이며 서버는 해당 요청의 실행을 거부한다는 의미입니다.

다음은 토큰 인증을 사용한 샘플 코드입니다.

// 生成Token
$token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $token;

// 将Token嵌入到表单中
<form method="post" action="process.php">
    <input type="hidden" name="csrf_token" value="<?php echo $token; ?>">
    <!-- other form fields -->
    <input type="submit" value="Submit">
</form>

// 在处理请求时验证Token
session_start();
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die("Invalid CSRF token");
}
// 处理请求
로그인 후 복사
  1. HTTP 리퍼러 제한:
    HTTP 리퍼러는 요청이 시작된 페이지의 URL이 포함된 HTTP 요청 헤더입니다. 이 헤더 필드를 사용하여 요청이 동일한 도메인 이름에서 오는지 확인할 수 있습니다. 요청을 검증할 때 요청한 리퍼러가 현재 도메인 이름과 동일한지 확인할 수 있습니다. 다르다면 악의적인 요청일 가능성이 높습니다. 그러나 일부 브라우저나 프록시 서버에서는 Referer가 비활성화되거나 위조될 수 있으므로 이 방법은 완전한 보안을 보장하지 않는다는 점에 유의해야 합니다.

다음은 HTTP Referer를 제한하는 샘플 코드입니다.

$referer = $_SERVER['HTTP_REFERER'];
$allowed_referer = 'https://www.example.com';

if (strpos($referer, $allowed_referer) !== 0) {
    die("Invalid Referer");
}
// 处理请求
로그인 후 복사
  1. SameSite 쿠키 속성 설정:
    PHP 7.3 이상에서는 쿠키에 SameSite 속성을 설정할 수 있습니다. SameSite 속성은 쿠키가 동일한 사이트에서만 사용될 수 있도록 정의하여 CSRF 공격을 효과적으로 방지할 수 있습니다. 쿠키의 SameSite 속성을 "Strict" 또는 "Lax"로 설정할 수 있습니다. "엄격함"은 동일한 사이트에서만 쿠키를 사용할 수 있음을 의미하고 "Lax"는 일부 교차 사이트 상황에서는 쿠키가 허용되지만 POST 요청에서는 허용되지 않음을 의미합니다.

SameSite 쿠키 속성을 설정하는 샘플 코드는 다음과 같습니다.

session_start();
session_set_cookie_params([
    'httponly' => true,
    'samesite' => 'Lax'
]);
로그인 후 복사

결론:
PHP에서 CSRF 공격을 처리하려면 일련의 보안 조치를 취해야 합니다. 토큰 확인 사용, HTTP 참조자 제한 및 SameSite 쿠키 속성 설정은 모두 CSRF 공격을 방어하는 효과적인 방법입니다. 이러한 방법으로 웹사이트의 보안이 향상될 수 있지만 개발자는 항상 새로운 보안 위협과 모범 사례에 세심한 주의를 기울이고 적시에 보호 조치를 업데이트하여 웹사이트의 보안을 보장해야 합니다.

위 내용은 PHP에서 CSRF(교차 사이트 요청 위조) 공격을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!