Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk mengelakkan isu keselamatan kerentanan kemasukan fail dalam pembangunan bahasa PHP?
Bahasa PHP sentiasa menjadi bahasa pembangunan web yang popular Ia mempunyai sintaks yang ringkas dan mudah dibaca, fungsi yang berkuasa dan ekosistem yang besar. Dalam sejumlah besar aplikasi web, bahasa PHP memainkan peranan penting. Walau bagaimanapun, apabila digunakan secara tidak wajar, ia boleh menjadi kerentanan yang terdedah, dan kerentanan kemasukan fail adalah salah satu daripadanya. Dalam artikel ini, kami akan memperkenalkan definisi kerentanan kemasukan fail dan membincangkan cara untuk mengelakkan isu keselamatan kerentanan kemasukan fail sebanyak mungkin.
Apakah itu kerentanan kemasukan fail?
Kerentanan kemasukan fail bermakna apabila fail disertakan melalui rujukan dinamik, input kawalan pengguna yang tidak ditapis dihantar terus ke fungsi kemasukan fail, menyebabkan penyerang memintas fail dengan mengawal nama fail atau parameter. Kegagalan untuk mengesahkan nama fail akhirnya boleh membawa kepada isu keselamatan yang serius seperti penyerang berjaya menyuntik kod hasad, mendapatkan maklumat sistem, membaca kandungan fail dan mengawal sistem dari jauh. Ia boleh dilihat bahawa kelemahan kemasukan fail adalah sangat berbahaya, dan penyerang boleh menggunakan kelemahan ini untuk mengawal keseluruhan sistem.
Bagaimana untuk mengelakkan kelemahan pemasukan fail?
Kunci untuk mengelakkan kerentanan kemasukan fail ialah menapis parameter input pengguna, yang boleh dicapai melalui kaedah berikut:
Apabila menggunakan rangka kerja aplikasi web, direktori akar aplikasi ditakrifkan secara amnya Fail dalam direktori ini boleh diakses oleh pengguna secara umumnya melalui pembolehubah $_SERVER['DOCUMENT_ROOT']. Apabila menyertakan fail, anda harus menggunakan laluan relatif berdasarkan direktori ini dan bukannya laluan mutlak, supaya laluan yang boleh memintas pengesahan keselamatan tidak boleh digunakan oleh penyerang.
Gunakan mekanisme senarai putih untuk menyatakan dengan jelas fail mana yang boleh disertakan dan fail mana yang tidak boleh disertakan. Semua parameter input pengguna mesti disenarai putih terlebih dahulu dan hanya fail undang-undang akan disertakan.
Jika pembolehubah dinamik berdasarkan nama fail digunakan, laluan fail mesti dibina berdasarkan maklumat yang diberikan oleh pengguna . Jadi kita mesti menggunakan fungsi realpath untuk mendapatkan laluan mutlak fail, dan kemudian menentukan sama ada fail itu berada di bawah laluan aplikasi untuk menghalang penyerang daripada menyuntik kandungan seperti bytes/blog.php/../../etc/passwd ke dalam pembolehubah foo dengan itu mendapat kawalan sepenuhnya ke atas sistem.
Contohnya:
$file = $_REQUEST['file']; if (!realpath('./'.$file)) { die('Invalid file path'); }
Banyak fungsi enjin templat adalah berdasarkan dipratentukan Laluan templat ini mungkin sangat terhad, jadi pemaparan templat boleh dicapai dengan menggunakan enjin templat seperti ranting dan symfony, sekali gus mengurangkan kerja pembangun dalam memproses parameter input.
Ringkasan
Fail yang mengandungi kelemahan boleh menyebabkan banyak masalah keselamatan rangkaian dan mesti dicegah dan diperbaiki. Kunci untuk mengelakkan kerentanan kemasukan fail adalah dengan ketat menapis parameter yang dimasukkan pengguna dan tidak bergantung semata-mata pada kredibiliti pengguna. Mengguna pakai mekanisme senarai putih, pemformatan laluan fail dan menggunakan enjin templat seperti ranting dan symfony dalam PHP7 adalah semua langkah pertahanan yang berkesan yang boleh membantu kami mencegah isu keselamatan dengan berkesan apabila fail mengandungi kelemahan. Marilah kita memberi perhatian kepada isu keselamatan semasa proses pembangunan dan membina aplikasi web yang selamat dan boleh dipercayai.
Atas ialah kandungan terperinci Bagaimana untuk mengelakkan isu keselamatan kerentanan kemasukan fail dalam pembangunan bahasa PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!