Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk membetulkan kerentanan kemasukan fail jauh PHP

Bagaimana untuk membetulkan kerentanan kemasukan fail jauh PHP

WBOY
WBOYasal
2023-08-08 09:42:241945semak imbas

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
    ?>
  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;
    ?>
  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;
    ?>
  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;
    ?>

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!

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