概要: PHP 関数での CSRF 攻撃は、トークンを使用して防御できます。一意のトークンを生成し、セッションまたは Cookie に保存します。保護されたフォームに非表示フィールドとしてトークンを含めます。フォームの送信を処理するときに、トークンが保存されているトークンと一致することを確認してください。一致するものがない場合、リクエストは拒否されます。
PHP 関数で CSRF 攻撃を防御する方法
クロスサイト リクエスト フォージェリ (CSRF) は、次のような悪意のある手法です。攻撃者は、被害者のブラウザを介してなりすましのリクエストを送信します。 PHP アプリケーションの場合、これにより、攻撃者が特定の機能を使用して不正な操作を実行できる可能性があります。
実際的なケース:
ユーザーがパスワードを変更できるようにする関数 change_password
を含む PHP アプリケーションがあるとします。この関数は次のコードを使用します。
<?php if (isset($_POST['password'])) { $password = $_POST['password']; // 更新数据库中的密码... } ?>
攻撃者は、被害者のパスワードとして使用したい パスワード#を含む POST リクエストを被害者のブラウザに送信できるため、このコードは CSRF 攻撃に対して脆弱です。 ## パラメーター。この攻撃は、なりすましメール、悪意のある Web サイト、またはその他の方法を通じて実行される可能性があります。
防御手段:
CSRF 攻撃を防御するには、リクエストの信頼性を検証するメカニズムを実装する必要があります。一般的な方法の 1 つはトークンを使用することです。<?php session_start(); // 生成令牌并将其存储在会话中 $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); ?>
<form action="change_password.php" method="post"> <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>" /> <!-- 其他表单字段 --> </form>
<?php if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) { // 令牌验证失败,拒绝请求 exit('Invalid request'); } ?>これらの防御策を実装することで、PHP アプリケーションの CSRF 攻撃のリスクを軽減できます。
以上がPHP 機能を CSRF 攻撃から保護するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。