>  기사  >  백엔드 개발  >  PHP 프레임워크 보안 가이드: CSRF 공격을 방지하는 방법은 무엇입니까?

PHP 프레임워크 보안 가이드: CSRF 공격을 방지하는 방법은 무엇입니까?

WBOY
WBOY원래의
2024-06-01 10:36:57353검색

PHP 框架安全指南:如何防止 CSRF 攻击?

PHP 프레임워크 보안 가이드: CSRF 공격을 방지하는 방법?

교차 사이트 요청 위조(CSRF) 공격은 공격자가 사용자를 속여 피해자의 웹 애플리케이션 내에서 의도하지 않은 작업을 수행하도록 하는 네트워크 공격 유형입니다.

CSRF는 어떻게 작동하나요?

CSRF 공격은 대부분의 웹 애플리케이션이 동일한 도메인 이름 내의 여러 페이지 간에 요청을 보낼 수 있다는 사실을 악용합니다. 공격자는 피해자의 애플리케이션에 요청을 보내는 악성 페이지를 만들어 승인되지 않은 작업을 촉발합니다.

CSRF 공격을 방지하는 방법은 무엇입니까?

1. CSRF 방지 토큰 사용:

  • 각 사용자에게 고유한 토큰을 할당하고 이를 세션이나 쿠키에 저장합니다.
  • 이 토큰을 제출하려면 앱에 숨겨진 필드를 포함하세요.
  • 제출된 토큰이 저장된 토큰과 일치하는지 확인하세요.
// 生成令牌并存储在会话中
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

// 在表单中包含隐藏字段
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

// 验证提交的令牌
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    // 令牌无效,拒绝请求
}

2. 동기화 토큰 패턴 사용:

  • 페이지가 처음 로드되면 토큰을 생성하여 쿠키에 저장합니다.
  • 양식 제출 시 토큰을 HTTP 헤더로 서버에 보냅니다.
  • 제출된 토큰이 저장된 토큰과 일치하는지 확인하세요.
// 在首次加载页面时生成令牌并存储在 Cookie 中
setcookie('csrf_token', bin2hex(random_bytes(32)), time() + 3600, '/');

// 在表单提交时,将令牌作为 HTTP 头发送
$headers = getallheaders();
$csrf_token = $headers['X-CSRF-Token'];

// 验证提交的令牌
if (!isset($csrf_token) || $csrf_token !== $_COOKIE['csrf_token']) {
    // 令牌无效,拒绝请求
}

실용 사례

예: 지갑 자금 이체에 대한 CSRF 공격 방지:

// 在用户加载转账页面时生成令牌
$transfer_token = bin2hex(random_bytes(32));

// 在表单中包含隐藏字段
<input type="hidden" name="transfer_token" value="<?php echo $transfer_token; ?>">

// 验证提交的令牌
if (!isset($_POST['transfer_token']) || $_POST['transfer_token'] !== $transfer_token) {
    // 令牌无效,拒绝转账请求
}

이러한 조치를 구현하면 CSRF 공격을 효과적으로 방지하고 PHP 애플리케이션을 보호할 수 있습니다.

위 내용은 PHP 프레임워크 보안 가이드: CSRF 공격을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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