Bagaimana untuk membetulkan kerentanan kemasukan fail jauh PHP

WBOY
Lepaskan: 2023-08-08 09:44:01
asal
1876 orang telah melayarinya

Bagaimana untuk membetulkan kerentanan kemasukan fail jauh PHP

Cara membetulkan kerentanan kemasukan fail jauh PHP

Dalam beberapa tahun kebelakangan ini, isu keselamatan rangkaian telah menarik lebih banyak perhatian. Antaranya, kelemahan kemasukan fail jauh PHP ialah kelemahan keselamatan biasa yang boleh dieksploitasi dengan mudah oleh penggodam untuk menyerang laman web. Artikel ini akan memperkenalkan cara untuk membetulkan kelemahan pemasukan fail jauh PHP dan memberikan beberapa contoh kod untuk membantu pembangun melindungi tapak web mereka dengan lebih baik.

Kerentanan kemasukan fail jauh bermakna bahawa dalam halaman web dinamik, apabila input data oleh pengguna dihantar terus sebagai parameter kepada fungsi kemasukan fail (seperti termasuk, memerlukan, dll.), data input disertakan secara langsung tanpa penapisan dan pengesahan, yang pengguna boleh mengawal fail luaran, mengakibatkan kelemahan pelaksanaan kod.

Kunci untuk membetulkan kerentanan ini terletak pada penapisan dan pengesahan input pengguna yang betul. Berikut ialah beberapa pembetulan:

  1. Lumpuhkan kemasukan fail jauh sepenuhnya:
    Kaedah paling mudah lagi berkesan ialah melumpuhkan kemasukan fail jauh. Tetapkan "allow_url_include" dalam fail konfigurasi PHP (php.ini) kepada 0 untuk melumpuhkan kemasukan fail jauh. Dengan cara ini, walaupun penyerang berjaya menyuntik laluan fail jauh, PHP tidak akan menghuraikan fail jauh.

    Kod sampel:

    <?php
    ini_set("allow_url_include", "0");
    // code goes here
    ?>
    Salin selepas log masuk
  2. Menapis input pengguna:
    Menapis dan mengesahkan data yang dimasukkan pengguna adalah langkah yang sangat penting sebelum memasukkan fail jauh. Anda boleh menggunakan fungsi penapis (seperti filter_var) untuk mengesahkan URL yang dimasukkan oleh pengguna untuk menentukan sama ada URL itu sah. Operasi kemasukan hanya dilakukan apabila URL ialah laluan fail tempatan yang sah.

    Kod contoh:

    <?php
    $url = $_GET['file'];
    $allowed_extensions = array("php", "html", "txt");
    
    // 检查URL是否是本地文件路径
    if (filter_var($url, FILTER_VALIDATE_URL) === false || !in_array(pathinfo($url, PATHINFO_EXTENSION), $allowed_extensions)) {
        echo "Invalid file URL";
        exit;
    }
    
    // 包含本地文件
    include $url;
    ?>
    Salin selepas log masuk
  3. Sekatan senarai putih:
    Menggunakan senarai putih, hanya fail tempatan dalam julat yang ditentukan dibenarkan. Walaupun penyerang berjaya menyuntik laluan fail jauh, dia tidak boleh mengeksploitasi kaedah ini.

    Kod contoh:

    <?php
    $file = $_GET['file'];
    $allowed_files = array("header.php", "footer.php", "config.php");
    
    // 检查文件是否在白名单中
    if (!in_array($file, $allowed_files)) {
        echo "Invalid file";
        exit;
    }
    
    // 包含文件
    include $file;
    ?>
    Salin selepas log masuk
  4. Gunakan laluan mutlak:
    Apabila menyertakan fail, lebih baik menggunakan laluan mutlak berbanding laluan relatif. Ini memastikan bahawa hanya fail dalam direktori yang ditentukan disertakan dan menghalang kemasukan fail lain yang tidak terkawal.

    Kod contoh:

    <?php
    $file = $_GET['file'];
    $base_path = "/var/www/html/includes/";
    
    // 拼接绝对路径
    $file_path = $base_path . $file;
    
    // 包含绝对路径的文件
    include $file_path;
    ?>
    Salin selepas log masuk

Di atas ialah beberapa kaedah biasa untuk membetulkan kelemahan kemasukan fail jauh PHP. Sebagai tambahan kepada kaedah ini, pembangun juga harus memastikan perisian mereka dikemas kini dan mengikuti amalan terbaik untuk pengekodan selamat untuk mengelakkan kesilapan lain yang mungkin membawa kepada kelemahan. Keselamatan rangkaian ialah topik yang kekal, dan kami perlu terus belajar dan terus menambah baik untuk melindungi keselamatan tapak web dan pengguna kami.

Atas ialah kandungan terperinci Bagaimana untuk membetulkan kerentanan kemasukan fail jauh PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!