Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan pengaturcaraan PHP untuk mengelakkan serangan traversal direktori

Amalan pengaturcaraan PHP untuk mengelakkan serangan traversal direktori

王林
王林asal
2023-07-05 20:21:071142semak imbas

Amalan pengaturcaraan PHP untuk mencegah serangan traversal direktori

Directory Traversal Attack, juga dikenali sebagai kelemahan lompat direktori dan kelemahan traversal laluan, ialah kelemahan keselamatan web yang biasa. Dengan membina input berniat jahat, penyerang cuba mendapatkan fail sensitif dalam sistem atau melakukan operasi berniat jahat. Artikel ini akan menerangkan cara menggunakan PHP untuk menulis kod selamat untuk mengelakkan serangan traversal direktori. Di bawah kami akan menghuraikan tiga aspek: penapisan dan pengesahan input pengguna, kawalan keselamatan pemprosesan laluan fail dan kawalan keizinan akses fail.

1. Penapisan dan pengesahan input pengguna

Intipati serangan traversal direktori dicapai melalui input pengguna, jadi input pengguna mesti ditapis dan disahkan dengan berkesan. PHP menyediakan satu siri fungsi penapis dan ungkapan biasa untuk melaksanakan fungsi ini. Sebagai contoh, anda boleh menggunakan fungsi preg_match() untuk melaksanakan pemadanan biasa pada input pengguna, membenarkan hanya input yang mengandungi aksara undang-undang. Kod sampel adalah seperti berikut: preg_match()函数对用户输入进行正则匹配,只允许包含合法字符的输入。示例代码如下:

function validate_input($input) {
    // 允许的字符为字母、数字、下划线、点和斜杠
    $pattern = '/^[a-zA-Z0-9_./]+$/';
  
    if (preg_match($pattern, $input)) {
        return true;
    } else {
        return false;
    }
}

二、文件路径处理的安全控制

在PHP中,使用相对路径或绝对路径进行文件操作是常见的。为了防止目录遍历攻击,需要对用户输入的路径进行安全控制。首先,可以使用realpath()函数将用户输入的相对路径转换为绝对路径。接下来,使用basename()

function safe_path($path) {
    $basepath = '/var/www/html/uploads/';
  
    $realpath = realpath($basepath . $path);
  
    if (strpos($realpath, $basepath) === 0) {
        return basename($realpath);
    } else {
        return false;
    }
}

2. Kawalan keselamatan pemprosesan laluan fail

Dalam PHP, adalah perkara biasa untuk menggunakan laluan relatif atau laluan mutlak untuk operasi fail. Untuk mengelakkan serangan traversal direktori, adalah perlu untuk melaksanakan kawalan keselamatan pada laluan yang dimasukkan oleh pengguna. Mula-mula, anda boleh menggunakan fungsi realpath() untuk menukar laluan relatif yang dimasukkan oleh pengguna kepada laluan mutlak. Seterusnya, gunakan fungsi basename() untuk mendapatkan bahagian nama fail laluan, yang kemudiannya dibandingkan dengan laluan fail selamat. Kod sampel adalah seperti berikut:

<Directory "/var/www/html/uploads">
    Options -Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

3. Kawalan keizinan akses fail

Selain menapis dan memproses input pengguna, kawalan keselamatan juga perlu dilakukan di peringkat sistem fail. Pertama, pastikan fail di luar direktori akar tapak web (Document Root) tidak boleh diakses. Kedua, gunakan fail konfigurasi pelayan web seperti Apache atau Nginx untuk menetapkan kebenaran kawalan akses yang sesuai. Kod sampel adalah seperti berikut:

rrreee

Melalui langkah keselamatan di atas, kami boleh menghalang serangan lintasan direktori dengan berkesan. Walau bagaimanapun, langkah keselamatan hanyalah sebahagian daripada langkah pencegahan Cara yang paling berkesan ialah menjadikan keselamatan sebagai elemen utama dalam keseluruhan proses pembangunan aplikasi web dan menjalankan ujian keselamatan yang komprehensif. 🎜🎜Ringkasnya, melalui penapisan dan pengesahan input pengguna, kawalan keselamatan pemprosesan laluan fail dan kawalan keizinan akses fail, kami boleh meningkatkan keselamatan kod PHP dan dengan berkesan menghalang serangan lintasan direktori daripada berlaku. Pada masa yang sama, kami juga harus terus memberi perhatian kepada trend terkini dan kelemahan dalam bidang keselamatan web, dan dengan segera mengemas kini serta menambah baik langkah keselamatan kami untuk memastikan keselamatan aplikasi web. 🎜

Atas ialah kandungan terperinci Amalan pengaturcaraan PHP untuk mengelakkan serangan traversal direktori. 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