ホームページ >バックエンド開発 >PHPチュートリアル >相対パスを許可しながら PHP でディレクトリ トラバーサル攻撃を防ぐにはどうすればよいですか?

相対パスを許可しながら PHP でディレクトリ トラバーサル攻撃を防ぐにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-07 16:13:12971ブラウズ

How Can I Prevent Directory Traversal Attacks in PHP While Allowing Relative Paths?

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 サイトの他の関連記事を参照してください。

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