Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Panduan Keselamatan PHP: Mencegah Keterlaluan Laluan dan Kerentanan Muat Naik Fail Sewenang-wenangnya

Panduan Keselamatan PHP: Mencegah Keterlaluan Laluan dan Kerentanan Muat Naik Fail Sewenang-wenangnya

PHPz
PHPzasal
2023-07-01 08:13:371060semak imbas

Panduan Keselamatan PHP: Mencegah laluan traversal dan kelemahan muat naik fail sewenang-wenangnya

Pengenalan:
Dengan perkembangan pesat Internet, PHP, sebagai bahasa pembangunan web yang sangat popular, digunakan secara meluas dalam pembangunan pelbagai tapak web dan aplikasi pertengahan. Walau bagaimanapun, disebabkan fleksibiliti dan keterbukaan PHP, ia juga memberi peluang kepada penggodam untuk mengeksploitasi kelemahan. Artikel ini akan menumpukan pada dua kelemahan keselamatan biasa, iaitu kerentanan laluan traversal dan kerentanan muat naik fail sewenang-wenangnya, dan menyediakan langkah pencegahan yang sepadan.

1. Kerentanan laluan laluan
Kerentanan laluan laluan bermakna penyerang mengubah suai parameter URL untuk melarikan diri daripada julat laluan yang ditentukan dan mengakses fail sensitif dalam sistem. Berikut ialah contoh kod biasa:

$file = $_GET['file'];
include '/path/to/files/' . $file;

Seorang penyerang boleh menghantar parameter fail sebagai "../config.php" untuk mengakses fail sensitif seperti /config.php. Untuk mengelakkan kelemahan traversal laluan, kita harus mengambil langkah berikut:

  • Pengesahan input: Lakukan pengesahan yang diperlukan pada parameter nama fail yang dimasukkan oleh pengguna, dan hanya benarkan nama fail dalam format tertentu atau dalam julat tertentu. Ungkapan biasa atau senarai putih boleh digunakan untuk menapis input pengguna.
$file = $_GET['file'];
if (!preg_match('/^[a-zA-Z0-9]{1,20}.(jpg|png|gif)$/', $file)) {
    die('Invalid file name');
}
  • Semakan laluan fail: Sebelum merujuk fail, lakukan semakan laluan fail untuk memastikan laluan fail berada dalam julat yang ditentukan. Anda boleh menggunakan fungsi realpath() untuk mendapatkan laluan mutlak fail dan membandingkannya dengan laluan asas pratetap.
$file = $_GET['file'];
$basePath = '/path/to/files/';
$fullPath = realpath($basePath . $file);
if ($fullPath === false || strncmp($fullPath, $basePath, strlen($basePath)) !== 0) {
    die('Invalid file path');
}

2. Kerentanan muat naik fail sewenang-wenangnya
Kerentanan muat naik fail sewenang-wenangnya bermakna penyerang menggunakan fungsi muat naik untuk memuat naik fail berniat jahat ke pelayan dan melaksanakan kod jahat di dalamnya, dengan itu mengawal pelayan atau mendapatkan maklumat sensitif. Berikut ialah beberapa langkah untuk mengelakkan kelemahan muat naik fail sewenang-wenangnya:

  • Pengesahan Jenis Fail: Untuk fail yang dimuat naik, jenis failnya mesti disahkan. Anda boleh menggunakan parameter $_FILES['file']['type'] untuk menentukan jenis fail dan membandingkannya dengan jenis fail yang dipercayai. Jika anda tidak mempercayai nilai $_FILES'file', anda boleh menilainya melalui maklumat pengepala fail.
$fileType = $_FILES['file']['type'];
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($fileType, $allowedTypes)) {
    die('Invalid file type');
}
  • Pengesahan sambungan fail: Selain mengesahkan jenis fail, sambungan fail juga harus disahkan. Anda boleh menggunakan fungsi pathinfo() untuk mendapatkan sambungan fail dan membandingkannya dengan senarai putih.
$fileName = $_FILES['file']['name'];
$allowedExtensions = ['jpg', 'png', 'gif'];
$fileExtension = pathinfo($fileName, PATHINFO_EXTENSION);
if (!in_array($fileExtension, $allowedExtensions)) {
    die('Invalid file extension');
}
  • Pengesahan kandungan fail: Walaupun pengesahan di atas diluluskan, kandungan fail masih perlu disahkan lebih lanjut. Anda boleh menggunakan fungsi membaca fail untuk membaca kandungan fail dan menyemak untuk memastikan kandungan fail adalah seperti yang diharapkan.
$filePath = $_FILES['file']['tmp_name'];
$fileContent = file_get_contents($filePath);
if (strpos($fileContent, 'malicious code') !== false) {
    die('Invalid file content');
}

Kesimpulan:
Kerentanan laluan traversal dan kelemahan muat naik fail sewenang-wenangnya ialah isu keselamatan yang mudah berlaku semasa pembangunan PHP. Kerentanan ini boleh dicegah dengan berkesan melalui penapisan dan pengesahan input pengguna yang ketat, serta semakan pada jenis fail, sambungan dan kandungan fail. Pada masa yang sama, memberi perhatian kepada pengumuman keselamatan rasmi PHP dan pembetulan keselamatan terkini, dan mengemas kini versi PHP tepat pada masanya juga merupakan langkah penting untuk melindungi keselamatan sistem.

Atas ialah kandungan terperinci Panduan Keselamatan PHP: Mencegah Keterlaluan Laluan dan Kerentanan Muat Naik Fail Sewenang-wenangnya. 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