ホームページ  >  記事  >  バックエンド開発  >  PHP 開発におけるクロスサイト リクエスト フォージェリに対処する方法

PHP 開発におけるクロスサイト リクエスト フォージェリに対処する方法

王林
王林オリジナル
2023-10-08 10:03:171116ブラウズ

PHP 開発におけるクロスサイト リクエスト フォージェリに対処する方法

PHP 開発におけるクロスサイト リクエスト フォージェリに対処する方法

はじめに: インターネットの急速な発展に伴い、Web サイトのセキュリティ問題がますます顕著になってきています。その 1 つはクロスサイト リクエスト フォージェリ (CSRF) の問題です。この記事では、PHP 開発における CSRF 攻撃に効果的に対処する方法を紹介し、具体的なコード例を示します。

  1. クロスサイト リクエスト フォージェリとは何ですか?
    クロスサイト リクエスト フォージェリ (CSRF) は、攻撃者がユーザーをだまして、ログインしている Web サイト上で送金や個人情報の改ざんなどの悪意のある操作を実行させる攻撃手法です。通常、攻撃者はユーザーのログイン状態を利用して、別の Web サイトに悪意のあるリクエストを送信し、ユーザーの身元を偽って操作を実行します。
  2. CSRF 攻撃を防ぐ一般的な方法
    (1) ランダムにトークンを生成する
    ユーザーがログインすると、ユーザーに対してランダムなトークンが生成され、サーバー側とユーザーのセッションに保存されます。各ユーザー リクエストでは、リクエスト内にトークンを含めて、サーバー側でトークンを検証する必要があります。トークンはランダムに生成されるため、攻撃者は正しいトークン値を推測できず、CSRF 攻撃を防ぐことができます。

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

// 在用户登录时生成Token,并存储在Session中
session_start();
if (!isset($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// 将Token添加到表单中
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

// 在服务器端验证Token
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
        die('CSRF攻击检测');
    }
}

(2) SameSite Cookie 属性の設定
最新のブラウザでは、Cookie の SameSite 属性を設定して、 CSRF 攻撃。 SameSite 属性の値は、Strict、Lax、または None に設定できます。 Strict は、同じサイトからリクエストが行われた場合にのみ Cookie を送信できることを意味し、Lax は、特定の状況 (外部 Web サイトからのリンクをクリックした場合など) で Cookie の送信が許可されることを意味します。 [なし] は、いかなる状況でも Cookie を送信できることを意味し、セキュリティ上の問題が発生する可能性があります。

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

setcookie('session_id', session_id(), [
    'expires' => 0,
    'path' => '/',
    'domain' => 'your_domain.com',
    'secure' => true,  // 只能通过HTTPS发送
    'httponly' => true,  // 无法通过JavaScript访问
    'samesite' => 'Strict'
]);
  1. その他の考慮事項
    (1) HTTPS プロトコルを使用する
    HTTPS プロトコルを使用すると、ユーザー間のリクエストとレスポンスを確実に行うことができます。また、リクエストが仲介者によってハイジャックされたり改ざんされたりするのを防ぐために、サーバーは暗号化されています。

(2) バックエンド フレームワークとライブラリをタイムリーに更新する
バックエンド フレームワークとライブラリのバージョンを頻繁に更新することで、コードのセキュリティを維持し、既知のセキュリティ脆弱性の発生を防ぐことができます。攻撃者によって悪用されます。

(3) 合理的な権限制御
各ユーザーに最低限の権限を付与し、権限を超えた操作を行わないようにする。

結論: クロスサイト リクエスト フォージェリ (CSRF) は、ネットワーク セキュリティの一般的な問題です。ランダムにトークンを生成し、SameSite Cookie 属性を設定することで、CSRF 攻撃を効果的に防ぐことができます。同時に、コードのセキュリティを維持し、適切な権限制御を行うことも、CSRF 攻撃を防ぐための重要な手段です。

総単語数: 714 単語

以上がPHP 開発におけるクロスサイト リクエスト フォージェリに対処する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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