ホームページ >バックエンド開発 >PHPチュートリアル >PHP 開発者はディレクトリ トラバーサルの脆弱性を効果的に防ぐにはどうすればよいでしょうか?

PHP 開発者はディレクトリ トラバーサルの脆弱性を効果的に防ぐにはどうすればよいでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-05 09:19:10223ブラウズ

How Can PHP Developers Effectively Prevent Directory Traversal Vulnerabilities?

PHP のディレクトリ トラバーサルの脆弱性の軽減: パスを安全に保存する

機密ディレクトリへの不正アクセスを防ぐことは、PHP 開発において非常に重要です。ディレクトリ トラバーサルの脆弱性は重大な脅威をもたらし、攻撃者が不適切な入力検証を悪用して、指定されたディレクトリの外に移動することを可能にします。

前述のシナリオでは、ベース パス「/whatever/foo/」があり、パスを許可する必要があります。それに比べて、「...」や「./..」のような絶対パスは、トラバーサルを防止する機能が不十分であるため、フィルタとして使用できません。

これに対処するための効果的な解決策は、実際のパスを比較することです。その仕組みは次のとおりです。

$basepath = '/foo/bar/baz/';
$realBase = realpath($basepath);

$userpath = $basepath . $_GET['path'];
$realUserPath = realpath($userpath);

if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) {
    // Directory Traversal Detected
} else {
    // Valid Path
}

realpath() 関数は、指定されたパスを対応する物理パスに解決し、シンボリックリンク、「ドット」ナビゲーション、およびその他のパス操作トリックを排除します。ユーザー パスの実際のパスとベース パスの実際のパスを比較することで、トラバーサルが試行されたかどうかを判断できます。実際のユーザー パスが実際のベース パスで始まらない場合、トラバーサルが発生している可能性があります。

realpath() の出力には、「.」のような仮想ディレクトリが除外されることに注意してください。または "..."。したがって、実際のパスを比較することで、攻撃者がそのような文字を使用してトラバーサルの脆弱性を悪用することを効果的に防止できます。

以上がPHP 開発者はディレクトリ トラバーサルの脆弱性を効果的に防ぐにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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