ホームページ >バックエンド開発 >PHPチュートリアル >PHP でクロスサイト リクエスト フォージェリ (CSRF) 攻撃を処理するにはどうすればよいですか?

PHP でクロスサイト リクエスト フォージェリ (CSRF) 攻撃を処理するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-06-29 20:45:061065ブラウズ

PHP でクロスサイト リクエスト フォージェリ (CSRF) 攻撃を処理するにはどうすればよいですか?

概要:
ネットワーク攻撃が進化し続けるにつれて、Web サイトのセキュリティを保護することが開発者にとって重要なタスクの 1 つになっています。クロスサイト リクエスト フォージェリ (CSRF) 攻撃は一般的なセキュリティ脅威であり、攻撃者はユーザーを騙して予期しない操作を実行させ、ユーザーが知らないうちに悪意のあるリクエストを送信できるようにします。このような攻撃を防ぐために、開発者はサイトを保護するためにさまざまな措置を講じることができます。この記事では、PHP で CSRF 攻撃に対処する方法について説明します。

  1. CSRF 攻撃の原理を理解する:
    CSRF 攻撃に対処し始める前に、攻撃の原理を理解する必要があります。 CSRF 攻撃は、他の Web サイトでユーザーのログイン資格情報を利用して、不正なアクションを実行することによって実行されます。攻撃者はリクエストを偽造し、ターゲット Web サイトに送信します。リクエストはユーザーの ID を使用して実行されます。リクエストを受信した後、Web サイトはそのリクエストがユーザー自身によって送信されたものであると誤って認識します。したがって、CSRF 攻撃を効果的に防御するには、この原則を理解することが重要です。
  2. トークン検証を使用する:
    トークン検証は、CSRF 攻撃を防御する一般的な方法です。これは、ユーザーごとに一意の識別子 (トークン) を生成し、このトークンをフォームに埋め込むことに基づいています。ユーザーがフォームを送信すると、サーバーはフォーム内のトークンがユーザーのセッション内のトークンと一致するかどうかを検証します。矛盾している場合は、これが悪意のあるリクエストであり、サーバーがリクエストの実行を拒否することを意味します。

以下は、トークン検証を使用するサンプル コードです:

// 生成Token
$token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $token;

// 将Token嵌入到表单中
<form method="post" action="process.php">
    <input type="hidden" name="csrf_token" value="<?php echo $token; ?>">
    <!-- other form fields -->
    <input type="submit" value="Submit">
</form>

// 在处理请求时验证Token
session_start();
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die("Invalid CSRF token");
}
// 处理请求
  1. HTTP リファラーを制限する:
    HTTP リファラーは、リクエスト開始ページを含む HTTP リクエスト ヘッダーです。 URL。このヘッダー フィールドを使用して、リクエストが同じドメイン名からのものであるかどうかを確認できます。リクエストを検証するとき、リクエストされたリファラーが現在のドメイン名と同じかどうかを確認できます。異なる場合は、悪意のあるリクエストである可能性があります。ただし、一部のブラウザやプロキシサーバーによってはリファラーが無効になったり偽装されたりする可能性があるため、この方法は完全なセキュリティを保証するものではないことに注意してください。

以下は、HTTP リファラーを制限するサンプル コードです:

$referer = $_SERVER['HTTP_REFERER'];
$allowed_referer = 'https://www.example.com';

if (strpos($referer, $allowed_referer) !== 0) {
    die("Invalid Referer");
}
// 处理请求
  1. SameSite Cookie 属性を設定します:
    PHP 7.3 以降では、SameSite を設定できます。クッキーの属性。 SameSite 属性は、Cookie が同じサイトでのみ使用できることを定義できるため、CSRF 攻撃を効果的に防止できます。 Cookie の SameSite 属性を「Strict」または「Lax」に設定できます。 「厳密」は、同じサイトでのみ Cookie の使用が許可されることを意味します。「緩い」は、一部のクロスサイト状況では Cookie が許可されるが、POST リクエストでは許可されないことを意味します。

以下は、SameSite Cookie 属性を設定するためのサンプル コードです:

session_start();
session_set_cookie_params([
    'httponly' => true,
    'samesite' => 'Lax'
]);

結論:
PHP で CSRF 攻撃を処理するには、一連のセキュリティ対策が必要です。トークン検証の使用、HTTP リファラーの制限、SameSite Cookie 属性の設定はすべて、CSRF 攻撃を防御する効果的な方法です。これらの方法で Web サイトのセキュリティを向上させることはできますが、開発者は常に新しいセキュリティの脅威とベスト プラクティスに細心の注意を払い、Web サイトのセキュリティを確保するために適時に保護対策を更新する必要があります。

以上がPHP でクロスサイト リクエスト フォージェリ (CSRF) 攻撃を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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