Amalan Terbaik untuk Mencegah Kerentanan Kemasukan Fail PHP
Ciri pemasukan fail PHP ialah ciri yang sangat biasa digunakan yang membolehkan pembangun menggabungkan coretan kod yang berbeza bersama-sama untuk mencapai penggunaan semula kod. Walau bagaimanapun, jika digunakan secara tidak betul, ciri pemasukan fail juga boleh membawa kepada kelemahan keselamatan, membolehkan penyerang melaksanakan kod hasad atau mengakses maklumat sensitif.
Artikel ini akan memperkenalkan beberapa amalan terbaik dan cadangan untuk membantu pembangun menghalang kelemahan keselamatan apabila menggunakan fungsi pemasukan fail PHP.
Input pengguna ialah salah satu sumber kelemahan keselamatan yang paling biasa. Input pengguna mesti ditapis dan diproses dengan betul sebelum menggunakan ciri pemasukan fail. Jangan gunakan input pengguna secara langsung untuk operasi pemasukan fail, sebaliknya sahkan dan bersihkannya.
Contoh kod:
$filename = $_GET['file']; if (preg_match('/^[a-zA-Z0-9_-]+$/',$filename)) { include($filename . '.php'); } else { // 非法的文件名 echo 'Invalid file name'; }
Dalam contoh di atas, ungkapan biasa digunakan untuk menapis nama fail dan hanya membenarkan nama fail sah yang mengandungi huruf, nombor, garis bawah dan sempang. Jika nama fail adalah sah, operasi pemasukan fail dilakukan jika tidak, mesej ralat dikembalikan.
Menggunakan laluan mutlak dan bukannya laluan relatif menyediakan keselamatan yang lebih baik. Laluan relatif boleh menyebabkan fail sasaran yang terkandung dalam fail itu digantikan dengan fail yang dikawal oleh penyerang. Oleh itu, adalah disyorkan untuk menggunakan laluan mutlak untuk merujuk fail yang disertakan.
Kod Contoh:
$filename = '/path/to/included/file.php'; include($filename);
Dalam contoh di atas, gunakan laluan mutlak untuk merujuk fail yang ingin anda sertakan, bukannya laluan relatif.
Untuk mengehadkan skop pemasukan fail, anda boleh menetapkan senarai putih untuk hanya membenarkan fail tertentu disertakan. Simpan senarai putih dalam tatasusunan atau fail konfigurasi dan sahkan fail sebelum memasukkannya.
Kod sampel:
$whitelist = ['file1.php', 'file2.php']; $filename = $_GET['file']; if (in_array($filename, $whitelist)) { include($filename); } else { // 无权访问文件 echo 'Access denied'; }
Dalam contoh di atas, hanya fail yang ditakrifkan dalam senarai putih akan disertakan, jika tidak mesej ralat akan dikembalikan.
Tetapkan allow_url_include
dalam fail konfigurasi PHP kepada Mati
untuk melumpuhkan kemasukan fail dinamik. Ini menghalang penyerang daripada melaksanakan kod berniat jahat dengan memasukkan fail jauh. allow_url_include
设置为Off
以禁用动态文件包含功能。这可以防止攻击者通过包含远程文件来执行恶意代码。
示例代码(php.ini):
allow_url_include = Off
通过禁用动态文件包含,可以防止包含远程文件的风险。
在PHP中,可以通过设置include_path
变量来限制包含文件的搜索路径。将其设置为一个只包含必要文件的目录,可以减少攻击者可能利用的目标文件。
示例代码(php.ini):
include_path = ".:/path/to/includes"
将include_path
rrreee
Dengan melumpuhkan pemasukan fail dinamik, anda boleh menghalang risiko memasukkan fail jauh. 🎜include_path
. Menetapkannya kepada direktori yang mengandungi hanya fail yang diperlukan mengurangkan bilangan fail yang boleh disasarkan oleh penyerang. 🎜🎜Contoh kod (php.ini): 🎜rrreee🎜Tetapkan Atas ialah kandungan terperinci Amalan terbaik untuk menghalang fail PHP daripada mengandungi kelemahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!