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:
$file = $_GET['file']; if (!preg_match('/^[a-zA-Z0-9]{1,20}.(jpg|png|gif)$/', $file)) { die('Invalid file name'); }
$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:
$fileType = $_FILES['file']['type']; $allowedTypes = ['image/jpeg', 'image/png', 'image/gif']; if (!in_array($fileType, $allowedTypes)) { die('Invalid file type'); }
$fileName = $_FILES['file']['name']; $allowedExtensions = ['jpg', 'png', 'gif']; $fileExtension = pathinfo($fileName, PATHINFO_EXTENSION); if (!in_array($fileExtension, $allowedExtensions)) { die('Invalid file extension'); }
$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!