緩解 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中文網其他相關文章!