ホームページ  >  記事  >  バックエンド開発  >  PHP 機能を CSRF 攻撃から保護するにはどうすればよいですか?

PHP 機能を CSRF 攻撃から保護するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-05-01 14:39:01359ブラウズ

概要: PHP 関数での CSRF 攻撃は、トークンを使用して防御できます。一意のトークンを生成し、セッションまたは Cookie に保存します。保護されたフォームに非表示フィールドとしてトークンを含めます。フォームの送信を処理するときに、トークンが保存されているトークンと一致することを確認してください。一致するものがない場合、リクエストは拒否されます。

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

PHP 関数で CSRF 攻撃を防御する方法

クロスサイト リクエスト フォージェリ (CSRF) は、次のような悪意のある手法です。攻撃者は、被害者のブラウザを介してなりすましのリクエストを送信します。 PHP アプリケーションの場合、これにより、攻撃者が特定の機能を使用して不正な操作を実行できる可能性があります。

実際的なケース:

ユーザーがパスワードを変更できるようにする関数 change_password を含む PHP アプリケーションがあるとします。この関数は次のコードを使用します。

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

  // 更新数据库中的密码...
}
?>

攻撃者は、被害者のパスワードとして使用したい パスワード#を含む POST リクエストを被害者のブラウザに送信できるため、このコードは CSRF 攻撃に対して脆弱です。 ## パラメーター。この攻撃は、なりすましメール、悪意のある Web サイト、またはその他の方法を通じて実行される可能性があります。

防御手段:

CSRF 攻撃を防御するには、リクエストの信頼性を検証するメカニズムを実装する必要があります。一般的な方法の 1 つはトークンを使用することです。

  1. トークンの生成:
一意で推測しにくいトークンを作成し、セッションまたは Cookie に保存します。

<?php
session_start();

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

  1. フォームにトークンを含めます:
保護するフォームに、トークンを非表示フィールドとして含めます。

<form action="change_password.php" method="post">
  <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>" />
  <!-- 其他表单字段 -->
</form>

  1. 検証トークン:
フォーム送信を処理するとき、トークンがセッションまたは Cookie に保存されているトークンと一致することを確認します。一致するものがない場合、リクエストは拒否されます。

<?php
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
  // 令牌验证失败,拒绝请求
  exit('Invalid request');
}
?>

これらの防御策を実装することで、PHP アプリケーションの CSRF 攻撃のリスクを軽減できます。

以上がPHP 機能を CSRF 攻撃から保護するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。