> 백엔드 개발 > PHP 튜토리얼 > CSRF 공격으로부터 PHP 기능을 보호하는 방법은 무엇입니까?

CSRF 공격으로부터 PHP 기능을 보호하는 방법은 무엇입니까?

WBOY
풀어 주다: 2024-05-01 14:39:01
원래의
394명이 탐색했습니다.

요약: PHP 함수의 CSRF 공격은 토큰을 사용하여 방어할 수 있습니다. 고유한 토큰을 생성하여 세션이나 쿠키에 저장합니다. 보호된 양식에 토큰을 숨겨진 필드로 포함합니다. 양식 제출을 처리할 때 토큰이 저장된 토큰과 일치하는지 확인하세요. 일치하는 항목이 없으면 요청이 거부됩니다.

如何防止 PHP 函数受到 CSRF 攻击?

PHP 함수에서 CSRF 공격을 방어하는 방법

교차 사이트 요청 위조(CSRF)는 공격자가 피해자의 브라우저를 통해 스푸핑된 요청을 보낼 수 있도록 하는 악성 기술입니다. PHP 애플리케이션의 경우 이로 인해 공격자가 특정 기능을 사용하여 승인되지 않은 작업을 수행할 수 있습니다.

실용 사례:

사용자가 비밀번호를 변경할 수 있는 change_password 함수가 포함된 PHP 애플리케이션이 있다고 가정해 보겠습니다. 이 함수는 다음 코드를 사용합니다. change_password。该函数使用以下代码:

<?php
if (isset($_POST['password'])) {
  $password = $_POST['password'];

  // 更新数据库中的密码...
}
?>
로그인 후 복사

此代码容易受到 CSRF 攻击,因为攻击者可以向受害者的浏览器发送一个 POST 请求,其中包含他们希望用于受害者密码的 password

<?php
session_start();

// 生成令牌并将其存储在会话中
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
?>
로그인 후 복사

이 코드는 공격자가 피해자의 비밀번호에 사용하려는 password 매개변수가 포함된 POST 요청을 피해자의 브라우저에 보낼 수 있기 때문에 CSRF 공격에 취약합니다. 이 공격은 스푸핑된 이메일, 악성 웹사이트 또는 기타 방법을 통해 수행될 수 있습니다.

방어 조치:

CSRF 공격을 방어하려면 요청의 신뢰성을 확인하는 메커니즘을 구현해야 합니다. 일반적인 방법 중 하나는 토큰을 사용하는 것입니다.
  1. 토큰 생성:

고유하고 추측하기 어려운 토큰을 만들어 세션이나 쿠키에 저장하세요.
    <form action="change_password.php" method="post">
      <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>" />
      <!-- 其他表单字段 -->
    </form>
    로그인 후 복사
  1. 양식에 토큰 포함:

보호하려는 양식에 토큰을 숨겨진 필드로 포함하세요.
    <?php
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
      // 令牌验证失败,拒绝请求
      exit('Invalid request');
    }
    ?>
    로그인 후 복사
  1. 검증 토큰:
  2. 양식 제출을 처리할 때 토큰이 세션이나 쿠키에 저장된 토큰과 일치하는지 확인하세요. 일치하는 항목이 없으면 요청이 거부됩니다.

    rrreee

    이러한 방어를 구현하면 PHP 애플리케이션에 대한 CSRF 공격 위험을 줄일 수 있습니다. 🎜

    위 내용은 CSRF 공격으로부터 PHP 기능을 보호하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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