Apabila bekerja dengan laluan relatif, adalah penting untuk melindungi daripada serangan traversal direktori yang boleh menjejaskan maklumat sistem sensitif.
Pertimbangkan senario di mana anda mempunyai laluan asas '/whatever/foo/' dan perlu membenarkan laluan relatif menggunakan pembolehubah $_GET['path']. Walau bagaimanapun, pelakon yang berniat jahat boleh cuba mengeksploitasi mekanisme ini dengan menyuntik urutan lintasan laluan (seperti '..' atau './') untuk mengakses direktori terhad.
Untuk mencegah traversal direktori dengan berkesan sambil membenarkan laluan relatif, anda boleh gunakan teknik berikut:
$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 }
Kaedah ini memanfaatkan fungsi realpath() untuk menentukan fizikal mutlak laluan kedua-dua laluan asas dan yang disediakan pengguna. Dengan membandingkan laluan mutlak ini, anda boleh mengesahkan bahawa laluan pengguna tidak melintasi luar laluan asas yang ditetapkan. Jika ya, realpath() akan mengembalikan false atau laluan yang salah, mencetuskan pengesanan percubaan melintasi direktori.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Serangan Traversal Direktori dalam PHP Semasa Membenarkan Laluan Relatif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!