Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Pembangun PHP Boleh Mencegah Kerentanan Traversal Direktori dengan Berkesan?

Bagaimanakah Pembangun PHP Boleh Mencegah Kerentanan Traversal Direktori dengan Berkesan?

Susan Sarandon
Susan Sarandonasal
2024-12-05 09:19:10223semak imbas

How Can PHP Developers Effectively Prevent Directory Traversal Vulnerabilities?

Mengurangkan Kerentanan Traversal Direktori dalam PHP: Memelihara Laluan Dengan Selamat

Menghalang akses tanpa kebenaran kepada direktori sensitif adalah penting dalam pembangunan PHP. Kerentanan traversal direktori menimbulkan ancaman yang ketara, membolehkan penyerang mengeksploitasi pengesahan input yang tidak betul untuk menavigasi di luar direktori yang ditetapkan.

Dalam senario yang dinyatakan, di mana anda mempunyai laluan asas "/whatever/foo/" dan perlu membenarkan laluan berbanding dengannya, laluan mutlak seperti "..." atau "./.." tidak boleh digunakan sebagai penapis kerana keupayaannya yang tidak mencukupi untuk menghalang serangan traversal.

Untuk menangani ini, penyelesaian yang berkesan ialah membandingkan laluan sebenar. Begini caranya:

$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
}

Fungsi realpath() menyelesaikan laluan yang disediakan ke laluan fizikalnya yang sepadan, menghapuskan symlink, navigasi "titik" dan helah manipulasi laluan lain. Dengan membandingkan laluan sebenar laluan pengguna dengan laluan sebenar laluan asas, anda boleh menentukan sama ada traversal telah dicuba. Jika laluan pengguna sebenar tidak bermula dengan laluan asas sebenar, traversal mungkin berlaku.

Perhatikan bahawa output realpath() tidak termasuk direktori maya seperti "." atau "...". Oleh itu, membandingkan laluan sebenar secara berkesan menghalang penyerang daripada mengeksploitasi kelemahan lintasan menggunakan aksara sedemikian.

Atas ialah kandungan terperinci Bagaimanakah Pembangun PHP Boleh Mencegah Kerentanan Traversal Direktori dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn