ホームページ >バックエンド開発 >PHPチュートリアル >相対パスを許可しながら PHP でディレクトリ トラバーサル攻撃を防ぐにはどうすればよいですか?
相対パスを使用する場合、システムの機密情報を侵害する可能性のあるディレクトリ トラバーサル攻撃から保護することが重要です。
「/whatever/foo/」のベースパスがあり、それを許可する必要があるシナリオを考えてみましょう。 $_GET['path'] 変数を使用した相対パス。ただし、悪意のある攻撃者は、パス トラバーサル シーケンス (「..」や「./」など) を挿入して、制限されたディレクトリにアクセスすることによって、このメカニズムを悪用しようとする可能性があります。
相対パスを許可しながらディレクトリ トラバーサルを効果的に防止するには、次のようにします。次の手法を利用します。
$basepath = '/foo/bar/baz/'; $realBase = realpath($basepath); $userpath = $basepath . $_GET['path']; $realUserPath = realpath($userpath); if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) { // Directory Traversal Attempt Detected } else { // Valid Path }
このメソッドは、realpath() 関数を利用して、ベースとパスの両方の絶対物理パスを決定します。ユーザーが提供したパス。これらの絶対パスを比較することで、ユーザー パスが指定されたベース パスの外側を通過していないことを確認できます。存在する場合、realpath() は false または間違ったパスを返し、ディレクトリ トラバーサルの試みの検出をトリガーします。
以上が相対パスを許可しながら PHP でディレクトリ トラバーサル攻撃を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。