PHP を使用してクロスサイト リクエスト フォージェリ (CSRF) 攻撃を防御する方法
Web アプリケーションの開発と普及に伴い、ネットワーク セキュリティの問題はますます重要になってきています。クロスサイト リクエスト フォージェリ (CSRF) 攻撃は、一般的な攻撃方法の 1 つとなっています。 CSRF 攻撃とは、攻撃者が正当なユーザーからのリクエストになりすまして、ユーザーが気づかないうちに送金やパスワードの変更などの悪意のある操作を実行することを指します。ユーザーと Web アプリケーションを保護するために、開発者はそのような攻撃から防御するための措置を講じる必要があります。この記事では、PHP を使用して CSRF 攻撃を防御する方法を紹介します。
トークンを使用するサンプル コードは次のとおりです:
// 生成令牌 function generateToken() { $token = bin2hex(random_bytes(32)); $_SESSION['csrf_token'] = $token; return $token; } // 验证令牌 function verifyToken($token) { if(isset($_SESSION['csrf_token']) && $_SESSION['csrf_token'] === $token) { return true; } return false; } // 在表单中添加令牌字段 function addTokenField() { $token = generateToken(); echo '<input type="hidden" name="csrf_token" value="'.$token.'">'; }
Referer ヘッダーを確認するサンプル コード:
function verifyReferer() { if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) !== false) { return true; } return false; }
Origin ヘッダーを確認するサンプル コード:
function verifyOrigin() { if(isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] === 'https://www.example.com') { return true; } return false; }
Cookie 属性を設定するためのサンプル コード:
session_set_cookie_params([ 'lifetime' => 86400, // Cookie的有效期为一天 'path' => '/', 'domain' => '.example.com', 'secure' => true, // 仅在HTTPS连接下传输 'httponly' => true // 仅通过HTTP协议访问 ]); session_start();
ログイン プロセス中に、ログイン トークンを生成し、サーバー側とセッションに保存できます。各ログイン要求では、トークンの有効性を検証して、トークンがログイン プロセスを通じてのみ取得できることを確認する必要があります。
ログアウト プロセス中に、ユーザーに関連するセッション データを破棄し、セッション ID を削除する必要があります。これにより、攻撃者がセッション ID を盗んでユーザーになりすますのを防ぎます。
概要:
CSRF 攻撃はネットワーク セキュリティの一般的な問題ですが、この攻撃を防御するためにいくつかの対策を講じることができます。この記事では、トークンの生成と検証、リクエスト ソースの検証、Cookie 属性の設定、ログインとログアウトのセキュリティへの注意など、PHP を使用して CSRF 攻撃を防御する方法をいくつか紹介します。これらの方法を組み合わせて使用することで、Web アプリケーションとユーザーのセキュリティを効果的に保護できます。
以上がPHP が CSRF 攻撃を防御する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。