PHP フォームを使用して CSRF 攻撃を防ぐ方法

王林
リリース: 2023-06-24 16:26:02
オリジナル
1297 人が閲覧しました

ネットワーク技術の継続的な発展に伴い、ネットワーク アプリケーション開発においてセキュリティの問題はますます無視できない問題になってきています。中でもクロスサイト リクエスト フォージェリ (CSRF) 攻撃は一般的な攻撃手法であり、その主な目的は、ユーザーがブラウザ内で悪意のあるリクエストを開始できるようにすることで、ユーザーを利用してバックグラウンドで不正なリクエストを開始させることです。 Web サイトにログインしているため、サーバー側のセキュリティの脆弱性が生じます。 PHP アプリケーションでは、フォーム検証の使用は CSRF 攻撃を防ぐ効果的な手段です。

  1. CSRF トークンの検証に参加

CSRF 攻撃は主にログイン ユーザーの ID を使用してリモート攻撃を実行するため、この攻撃方法に対する最も直接的な保護は追加です。ページ データとフォームにいくつかの型破りな値を追加し、各フォーム リクエストの送信を 1 回のみに制限します。これらの値は CSRF トークンであり、フォーム送信時の ID 情報が合法かどうかを検証するために使用されます。バックグラウンドでフォーム送信を処理する場合、トークンを検証する必要があり、事前に設定されたトークンと一致する場合にのみ、リクエストの処理を続行できます。

サンプル コードは次のとおりです。

// 生成Token值,通常可以在session中设置

session_start();

$token = md5(uniqid(mt_rand(), true));

$_SESSION['csrf_token'] = $token;

// 应用到表单中

<input type="hidden" name="csrf_token" value="<?=$_SESSION['csrf_token']?>"/>
ログイン後にコピー

フォーム送信の場合、次のようにデータを処理する前にトークンの検証が必要です。

// 获取表单提交的Token

$submittedToken = $_POST['csrf_token'];

// 验证Token是否合法

if (!isset($_SESSION['csrf_token']) || $submittedToken !== $_SESSION['csrf_token']) {

    die('Token validation failed, request denied');

}
ログイン後にコピー

上記のコードでは、次のように使用します。 PHP のセッション メカニズムは、重複しないランダムなトークン値を生成し、セッションに保存します。フォームでは、トークン値を非表示フィールドのフィールドとしてバックグラウンドに渡し、フォームの送信時にトークン値をサーバーに送信できるようにする必要があります。サーバー側では、リクエストされたトークンの値を確認する必要があり、送信されたトークンが事前定義されたトークンと一致しない場合、リクエストは拒否される必要があります。

  1. リファラー ポリシー ヘッダーの構成

リファラー ポリシーは、サードパーティ サイトにリクエストを送信するときにブラウザーにリファラー フィールドを含めるかどうかを制御するために使用される HTTP ヘッダーです。フォーム処理中に不正なリファラーフィールドに対するリクエストを直接拒否すると、CSRF 攻撃を効果的に防御できます。

PHP では、次のコードを使用して Referrer Policy ヘッダーを設定できます。

header('Referrer-Policy: no-referrer');
ログイン後にコピー

上記のコードは、リクエストの送信時に Referrer ヘッダー情報を含めないようブラウザーに指示します。このようにして、攻撃者が Referrer ヘッダーを偽造して CSRF 攻撃を実行しようとしても、ブラウザーによって拒否され、リクエストはサーバーに送信されません。

  1. 「検証コード」または「パスワード」認証をフォームに追加します

CSRF トークンをフォームに追加することに加えて、追加の検証コードまたはパスワードを追加することもできます。 、など。フォームのセキュリティを強化し、CSRF 攻撃を防ぐための認証方法。この方法は比較的面倒ですが、攻撃者がどのようにサーバーを欺こうとしても、追加の認証リンクを経由する必要があり、攻撃がより困難になるため、非常に効果的です。

  1. フォームの送信には GET メソッドの使用を避ける

CSRF 攻撃は主に GET リクエストを通じて開始されるため、フォームでのデータの送信に GET メソッドの使用を避けるよう努めています。形状。 GET メソッドを使用する必要がある場合は、フォームのセキュリティを強化するためにトークン値またはその他の認証方法をフォームに追加する必要があります。

つまり、CSRF 攻撃の防止は、PHP アプリケーション開発において注意を払わなければならない課題です。トークン値、リファラー ポリシー ヘッダー、検証コードなどのさまざまなセキュリティ メカニズムを合理的に使用することで、CSRF 攻撃の脅威からアプリケーションを効果的に保護できます。同時に、最新のネットワークセキュリティ問題や攻撃手法にも引き続き注意を払い、セキュリティ対策を迅速に更新・改善していく必要があります。

以上がPHP フォームを使用して CSRF 攻撃を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート