Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk mengelakkan serangan kemasukan fail menggunakan PHP
Dengan perkembangan pesat Internet, isu keselamatan telah menjadi isu penting yang tidak boleh diabaikan. Serangan kemasukan fail adalah kaedah serangan yang sangat biasa dan berbahaya Perkara utama ialah penyerang boleh menggunakan kelemahan ini untuk mendapatkan maklumat sensitif pada pelayan. Oleh itu, cara menggunakan PHP untuk mengelakkan serangan kemasukan fail telah menjadi masalah yang mesti diselesaikan oleh ramai pembangun.
1. Fahami serangan kemasukan fail
Serangan kemasukan fail ialah serangan web biasa dan disenaraikan sebagai salah satu daripada sepuluh kelemahan keselamatan web teratas OWASP (Projek Keselamatan Aplikasi Web Terbuka). Ia boleh dibahagikan kepada kemasukan fail tempatan (LFI) dan kemasukan fail jauh (RFI).
Terdedah kepada serangan LFI apabila menggunakan data luaran yang tidak ditapis untuk menjana laluan fail. Sebagai contoh, kod berikut menggabungkan nama fail yang diserahkan pengguna dengan nama laluan:
<?php $file = '/home/user/'. $_GET['file']; include($file); ?>
Serangan LFI berlaku apabila pengguna menyediakan data menggunakan laluan relatif seperti ../.
Serangan RFI bermakna penyerang boleh melaksanakan kod jauhnya sendiri dalam pelayan. Sebagai contoh, kod berikut termasuk URL yang diserahkan pengguna secara langsung melalui fungsi file_get_contents():
<?php $url = $_GET['url']; $content = file_get_contents($url); echo $content; ?>
Serangan RFI berlaku apabila penyerang membekalkan URL hasad mereka sendiri.
2. Cegah serangan LFI
Untuk mengelakkan serangan LFI, kami mesti menapis nama fail dan laluan yang disediakan oleh pengguna. Menggunakan laluan mutlak ialah cara yang baik untuk mencegah serangan LFI.
Berikut ialah contoh penapisan yang mungkin, menggunakan pendekatan senarai putih termasuk nama fail dan laluan yang dibenarkan untuk disertakan:
<?php $allowed_files = array("file1.php", "file2.php"); $allowed_paths = array("/path1/", "/path2/"); $file = $_GET['file']; $path = $_GET['path']; if (!in_array($file, $allowed_files) || !in_array($path, $allowed_paths)) { die("Access Denied"); } include("/home/user/" . $path . $file); ?>
Menggunakan pendekatan senarai putih boleh mengurangkan risiko serangan LFI. Jika anda tidak mahu menggunakan kaedah senarai putih, anda juga boleh menggunakan kaedah mengehadkan jenis fail:
<?php $file = $_GET['file']; // 判断$file是否是php文件 if (!preg_match("/.php$/", $file)) { die("Access Denied"); } include("/home/user/" . $file); ?>
Mengehadkan jenis fail boleh menghalang jenis fail lain daripada disertakan.
3. Cegah serangan RFI
Untuk mengelakkan serangan RFI, kita mesti menapis URL yang disediakan oleh pengguna. Apabila menggunakan senarai putih, akses hanya boleh dibenarkan kepada pelayan jauh yang anda tentukan. Contohnya, anda boleh menetapkan pilihan allow_url_fopen dalam fail php.ini atau gunakan fungsi curl.
Berikut ialah contoh mencegah serangan RFI:
<?php $url = $_GET['url']; // 验证是否是信任的主机 if (!preg_match("/^http://(192.168.0.16|www.example.com)/", $url)) { die("Access Denied"); } $content = file_get_contents($url); echo $content; ?>
Dalam contoh ini, kami mengehadkan proses pengesahan kepada hos tertentu.
4. Langkah keselamatan lain apabila menggunakan PHP
Sesetengah fungsi boleh mengakses fail sistem, seperti eval(), exec(), dsb., supaya ia mudah tercemar atau disalahgunakan. Untuk keselamatan yang dipertingkatkan, fungsi ini harus dilumpuhkan.
Dalam versi PHP yang lebih lama, terdapat lebih banyak risiko kerentanan kemasukan fail. Oleh itu, memastikan versi PHP anda dikemas kini adalah salah satu cara untuk mengurangkan kelemahan dan meningkatkan keselamatan.
Untuk memastikan fail hanya tersedia kepada skrip atau pengguna yang bertujuan untuk melaksanakannya, kawalan kebenaran yang sesuai (seperti pemilikan fail dan hak akses) hendaklah digunakan.
Jadi, apabila menulis aplikasi web menggunakan PHP, keselamatan mesti diutamakan. Mengambil langkah keselamatan yang sesuai, seperti menggunakan kaedah senarai putih, mengehadkan jenis fail, melumpuhkan fungsi berbahaya, mengemas kini versi PHP dan menggunakan kawalan kebenaran, boleh mengurangkan risiko serangan kemasukan fail dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk mengelakkan serangan kemasukan fail menggunakan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!