PHP が CSRF 攻撃を防御する方法
PHP を使用してクロスサイト リクエスト フォージェリ (CSRF) 攻撃を防御する方法
Web アプリケーションの開発と普及に伴い、ネットワーク セキュリティの問題はますます重要になってきています。クロスサイト リクエスト フォージェリ (CSRF) 攻撃は、一般的な攻撃方法の 1 つとなっています。 CSRF 攻撃とは、攻撃者が正当なユーザーからのリクエストになりすまして、ユーザーが気づかないうちに送金やパスワードの変更などの悪意のある操作を実行することを指します。ユーザーと Web アプリケーションを保護するために、開発者はそのような攻撃から防御するための措置を講じる必要があります。この記事では、PHP を使用して CSRF 攻撃を防御する方法を紹介します。
- CSRF 攻撃の原理を理解する
CSRF 攻撃から防御する前に、攻撃の原理を理解する必要があります。 CSRF攻撃の原理は、ユーザーが他のWebサイトやWebアプリケーションにログインした後のCookie情報を利用して、悪意のあるリクエストを正当なリクエストに偽装し、標的のWebサイトやアプリケーションに送信するというものです。したがって、CSRF 攻撃では、ターゲット Web サイトのユーザーが認証に合格した正規のユーザーである必要があります。 - トークンの生成と検証
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.'">'; }
- リクエスト ソースを確認する
攻撃者がまだトークンを渡すことができるため、トークンを確認するだけでは十分ではありません。トークンを取得するための他の方法。セキュリティを強化するために、リクエストの送信元を確認することもできます。リクエストのソースを確認するには 2 つの方法があります。1 つは Referer ヘッダーを確認する方法、もう 1 つは Origin ヘッダーを確認する方法です。
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 属性を適切に設定する
Inセキュリティを向上させるために、Cookie の属性を設定することで CSRF 攻撃の難易度を高めることができます。たとえば、HTTPS 接続下でのみ Cookie が送信されるように設定したり、Cookie の範囲を現在のドメイン名のみに制限したりできます。
Cookie 属性を設定するためのサンプル コード:
session_set_cookie_params([ 'lifetime' => 86400, // Cookie的有效期为一天 'path' => '/', 'domain' => '.example.com', 'secure' => true, // 仅在HTTPS连接下传输 'httponly' => true // 仅通过HTTP协议访问 ]); session_start();
- ログインとログアウトのセキュリティに注意する
ログインとログアウトは、Web アプリケーションにおいて非常に重要な操作です。セキュリティにも特別な注意が必要です。ログインおよびログアウトのプロセスを適切に処理すると、CSRF 攻撃を効果的に防御できます。
ログイン プロセス中に、ログイン トークンを生成し、サーバー側とセッションに保存できます。各ログイン要求では、トークンの有効性を検証して、トークンがログイン プロセスを通じてのみ取得できることを確認する必要があります。
ログアウト プロセス中に、ユーザーに関連するセッション データを破棄し、セッション ID を削除する必要があります。これにより、攻撃者がセッション ID を盗んでユーザーになりすますのを防ぎます。
概要:
CSRF 攻撃はネットワーク セキュリティの一般的な問題ですが、この攻撃を防御するためにいくつかの対策を講じることができます。この記事では、トークンの生成と検証、リクエスト ソースの検証、Cookie 属性の設定、ログインとログアウトのセキュリティへの注意など、PHP を使用して CSRF 攻撃を防御する方法をいくつか紹介します。これらの方法を組み合わせて使用することで、Web アプリケーションとユーザーのセキュリティを効果的に保護できます。
以上がPHP が CSRF 攻撃を防御する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。
