Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Fail PHP mengandungi kelemahan dan penjelasan terperinci tentang kaedah pencegahan

Fail PHP mengandungi kelemahan dan penjelasan terperinci tentang kaedah pencegahan

PHPz
PHPzasal
2023-06-08 11:03:471492semak imbas

Penjelasan terperinci tentang kelemahan kemasukan fail PHP dan kaedah pencegahan

Dalam aplikasi WEB, fungsi kemasukan fail adalah fungsi yang sangat biasa. Walau bagaimanapun, kelemahan pemasukan fail boleh berlaku jika parameter yang dimasukkan pengguna tidak dikendalikan dengan berhati-hati. Kerentanan ini boleh membenarkan penyerang untuk memuat naik kod PHP dan memasukkannya ke dalam aplikasi, dengan itu mendapat kawalan ke atas pelayan. Oleh itu, adalah sangat perlu untuk mempunyai pemahaman yang mendalam tentang punca dan kaedah pencegahan kelemahan kemasukan fail PHP.

Punca kelemahan kemasukan fail PHP

Kejadian kerentanan kemasukan fail PHP biasanya berkaitan dengan dua sebab berikut:

1 🎜 >

Dalam PHP, anda boleh memasukkan satu fail PHP ke dalam fail PHP yang lain melalui fungsi seperti sertakan dan perlukan. Jika data yang diserahkan pengguna digunakan sebagai laluan fail dalam fungsi ini, penyerang boleh membina skrip PHP yang mengandungi kod hasad dan memuat naiknya ke pelayan dengan mudah. Contohnya:

<?php
   $page=$_GET['page'];
   include($page);
?>

Dalam contoh ini, penyerang boleh menetapkan parameter halaman kepada http://example.com/shell.php untuk memasukkan fail shell.php ke dalam aplikasi.

2. Data input pengguna tidak disahkan untuk kesahihannya

Walaupun data input pengguna ditapis, penyerang masih boleh menggunakan kaedah lain untuk mencapai kerentanan kemasukan fail. Contohnya, gunakan laluan relatif seperti ../ untuk mengakses, atau gunakan %00, dsb. untuk memintas aksara penamat nol. Contohnya:

<?php
   $page=$_GET['page'];
   include('pages/'.$page);
?>

Dalam contoh ini, penyerang boleh menetapkan parameter halaman kepada ../shell.php, dengan itu memintas sekatan fail dalam direktori halaman dan mengakses shell dalam direktori atas.

Kaedah untuk mencegah kerentanan kemasukan fail PHP

Untuk mencegah kerentanan kemasukan fail PHP dengan berkesan, anda perlu memberi perhatian kepada perkara berikut:

1 bila-bila boleh

Menggunakan laluan mutlak boleh menghalang penyerang secara berkesan daripada memintas sekatan dengan menggunakan laluan relatif seperti ../. Sebagai contoh, anda boleh menggunakan $_SERVER['DOCUMENT_ROOT'] untuk mendapatkan direktori akar tapak web, dan kemudian gunakan fungsi include, require dan lain-lain dalam kombinasi dengan laluan fail tertentu. Contohnya:

<?php
   $page=$_GET['page'];
   include($_SERVER['DOCUMENT_ROOT'].'/pages/'.$page);
?>

2. Gunakan senarai putih untuk menapis data input

Buat senarai putih yang mengandungi semua nama fail yang dibenarkan, dan kemudian tapis data yang dimasukkan oleh pengguna. Contohnya:

<?php
   $page=$_GET['page'];
   $whitelist=array('home','about','contact');
   if(in_array($page,$whitelist)){
      include("pages/".$page.".php");
   }else{
      echo "Invalid page requested";
   }
?>

3 Letakkan fungsi seperti memasukkan dan memerlukan dan data yang dimasukkan oleh pengguna dalam pernyataan yang berbeza

Fungsi tempat seperti memasukkan dan memerlukan dan data yang dimasukkan oleh pengguna dalam pernyataan yang berbeza. . Contohnya:

<?php
   $page=$_GET['page'];
   $file="pages/".$page;
   if(file_exists($file)){
      include($file);
   }else{
      echo "Invalid page requested";
   }
?>

Ringkasnya, pembangun aplikasi WEB amat perlu memahami punca dan kaedah pencegahan kelemahan kemasukan fail PHP. Dengan menggunakan kaedah pencegahan yang sesuai dan tabiat pengaturcaraan yang baik, kejadian kelemahan kemasukan fail boleh dikurangkan dengan berkesan, dan keselamatan aplikasi WEB juga boleh dipertingkatkan.

Atas ialah kandungan terperinci Fail PHP mengandungi kelemahan dan penjelasan terperinci tentang kaedah pencegahan. 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