Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengelakkan serangan kemasukan fail menggunakan PHP

Bagaimana untuk mengelakkan serangan kemasukan fail menggunakan PHP

WBOY
WBOYasal
2023-06-24 16:22:471149semak imbas

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

  1. Lumpuhkan fungsi berbahaya

Sesetengah fungsi boleh mengakses fail sistem, seperti eval(), exec(), dsb., supaya ia mudah tercemar atau disalahgunakan. Untuk keselamatan yang dipertingkatkan, fungsi ini harus dilumpuhkan.

  1. Versi PHP

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.

  1. Kawalan Kebenaran

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!

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