ホームページ >バックエンド開発 >PHPチュートリアル >ディレクトリトラバーサル攻撃を防ぐための PHP プログラミングの実践
ディレクトリ トラバーサル攻撃を防ぐための PHP プログラミングの実践
ディレクトリ トラバーサル攻撃 (ディレクトリ トラバーサル攻撃) は、ディレクトリ ジャンプの脆弱性やパス トラバーサルの脆弱性とも呼ばれ、一般的な Web セキュリティの脆弱性です。攻撃者は悪意のある入力を構築することで、システム内の機密ファイルを取得したり、悪意のある操作を実行したりしようとします。この記事では、PHP を使用してディレクトリ トラバーサル攻撃を防ぐ安全なコードを作成する方法について説明します。以下では、ユーザー入力のフィルタリングと検証、ファイル パス処理のセキュリティ制御、ファイル アクセス許可の制御の 3 つの側面について詳しく説明します。
1. ユーザー入力のフィルタリングと検証
ディレクトリ トラバーサル攻撃の本質はユーザー入力を通じて達成されるため、まずユーザー入力を効果的にフィルタリングして検証する必要があります。 PHP は、この機能を実装するための一連のフィルター関数と正規表現を提供します。たとえば、preg_match()
関数を使用すると、ユーザー入力に対して通常のマッチングを実行し、有効な文字を含む入力のみを許可できます。サンプルコードは以下の通りです:
function validate_input($input) { // 允许的字符为字母、数字、下划线、点和斜杠 $pattern = '/^[a-zA-Z0-9_./]+$/'; if (preg_match($pattern, $input)) { return true; } else { return false; } }
2. ファイルパス処理のセキュリティ制御
PHPではファイル操作に相対パスまたは絶対パスを使用するのが一般的です。ディレクトリトラバーサル攻撃を防ぐためには、ユーザーが入力したパスにセキュリティ制御を施す必要があります。まず、realpath()
関数を使用して、ユーザーが入力した相対パスを絶対パスに変換できます。次に、basename()
関数を使用して、パスのファイル名部分を取得してから、安全なファイル パスと比較します。サンプル コードは次のとおりです:
function safe_path($path) { $basepath = '/var/www/html/uploads/'; $realpath = realpath($basepath . $path); if (strpos($realpath, $basepath) === 0) { return basename($realpath); } else { return false; } }
3. ファイル アクセス許可の制御
ユーザー入力のフィルタリングと処理に加えて、セキュリティ制御もファイル システム レベルで実行する必要があります。まず、Web サイトのルート ディレクトリ (ドキュメント ルート) の外側にあるファイルがアクセスできないことを確認します。次に、Apache や Nginx などの Web サーバーの構成ファイルを使用して、適切なアクセス制御権限を設定します。サンプル コードは次のとおりです。
<Directory "/var/www/html/uploads"> Options -Indexes AllowOverride None Order allow,deny Allow from all </Directory>
上記のセキュリティ対策により、ディレクトリ トラバーサル攻撃を効果的に防ぐことができます。ただし、セキュリティ対策は予防策の一部にすぎず、最も効果的な方法は、セキュリティを Web アプリケーション開発プロセス全体の重要な要素として捉え、包括的なセキュリティ テストを実施することです。
要約すると、ユーザー入力のフィルタリングと検証、ファイル パス処理のセキュリティ制御、ファイル アクセス許可の制御を通じて、PHP コードのセキュリティを向上させ、ディレクトリ トラバーサル攻撃の発生を効果的に防ぐことができます。 . .同時に、Web セキュリティ分野の最新動向や脆弱性にも引き続き注意を払い、Web アプリケーションの安全性を確保するためにセキュリティ対策を迅速に更新および改善する必要があります。
以上がディレクトリトラバーサル攻撃を防ぐための PHP プログラミングの実践の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。