ホームページ >バックエンド開発 >PHPチュートリアル >PHP 開発者はディレクトリ トラバーサルの脆弱性を効果的に防ぐにはどうすればよいでしょうか?
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 サイトの他の関連記事を参照してください。