Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Melaksanakan Skrip Muat Naik Imej dengan Selamat untuk Mencegah Kerentanan?

Bagaimanakah Saya Boleh Melaksanakan Skrip Muat Naik Imej dengan Selamat untuk Mencegah Kerentanan?

Barbara Streisand
Barbara Streisandasal
2024-12-02 18:12:15687semak imbas

How Can I Securely Implement an Image Upload Script to Prevent Vulnerabilities?

Skrip Muat Naik Imej Selamat

Pengenalan

Melindungi muat naik imej adalah penting untuk mengelakkan aktiviti berniat jahat dan memastikan integriti tapak web anda. Artikel ini menyediakan penyelesaian menyeluruh untuk melaksanakan skrip muat naik imej selamat yang menangani pelbagai kemungkinan kelemahan.

Keperluan Utama

Membina skrip muat naik imej selamat melibatkan beberapa keperluan utama:

  • Pengesahan Jenis Fail: Cegah muat naik jenis fail berniat jahat (cth., skrip PHP).
  • Pengesahan Kandungan: Pastikan imej yang dimuat naik mematuhi keperluan imej (cth., menggunakan pustaka GD).
  • Pengasingan Folder: Simpan imej di lokasi bukan awam untuk mengelakkan langsung akses.
  • Ubah Arah Sisi Pelayan: Paparkan dan dapatkan semula imej dengan selamat daripada pelayan.
  • Pencegahan Kemasukan Fail Setempat: Lindungi daripada kelemahan yang membenarkan penyerang untuk mengakses terhad fail.

Pelaksanaan

Kod PHP (upload.php):


jika (isset($_POST['serahkan'])) {

// File type whitelist
$allowed_types = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif'];

// Sanitize input
$file_name = $_FILES['image']['name'];
$file_type = $_FILES['image']['type'];
$file_size = $_FILES['image']['size'];

// Validate file type
if (!in_array($file_type, $allowed_types)) {
    echo "Invalid file type. Please upload an image.";
    exit;
}

// Validate file size
if ($file_size > 1000000) {
    echo "File too large. Maximum size allowed is 1MB.";
    exit;
}

// Verify image using GD library
$image_info = getimagesize($_FILES['image']['tmp_name']);

if (!$image_info) {
    echo "Invalid image. Please upload a valid image.";
    exit;
}

// Generate random file name and extension
$new_file_name = str_replace(".", "", microtime()) . "." . pathinfo($file_name, PATHINFO_EXTENSION);

// Isolated upload path outside document root
$upload_directory = 'uploads/';

// Save image to secure directory
if (!move_uploaded_file($_FILES['image']['tmp_name'], $upload_directory . $new_file_name)) {
    echo "Image upload failed. Please try again.";
    exit;
}

echo "Image uploaded successfully.";</p>
<p>}<br>?></p>
<p><form action="upload.php" method="post" enctype="multipart/form-data"></p>
<pre class="brush:php;toolbar:false"><input type="file" name="image">



**Retrieve Image PHP Code (display.php):**

<code>
<?php

// Sanitize input
$id = (int)($_GET['id'] ?? 0);

// Connect to database
$host = 'localhost';
$user = 'username';
$pass = 'password';
$db = 'database';

$db = new mysqli($host, $user, $pass, $db);

if ($db->connect_error) {
    echo "Database connection error: " . $db->connect_error;
    exit;
}

// Retrieve image details from database
$sql = "SELECT * FROM uploads WHERE id = ?";
$stmt = $db->prepare($sql);
$stmt->bind_param('i', $id);
$stmt->execute();

$result = $stmt->get_result()->fetch_assoc();

if (!$result) {
    echo "Invalid image ID.";
    exit;
}

header('Content-Type: ' . $result['mime_type']);
header('Content-Length: ' . filesize('uploads/' . $result['path']));
readfile('uploads/' . $result['path']);

$db->close();

Persediaan Pangkalan Data

Buat pangkalan data dengan jadual yang dipanggil "muat naik" dengan lajur berikut:

  • id (int) - Kunci utama
  • laluan (teks) - Laluan fail
  • mime_type (teks) - jenis MIME imej

Tindakan Selepas Muat Naik

Sekali imej telah dimuat naik dengan selamat, mungkin terdapat tindakan tambahan yang perlu dipertimbangkan, seperti:

  • Penjanaan Imej Kecil: Cipta versi imej yang lebih kecil untuk dipaparkan dalam galeri, dsb.
  • Tanda air: Tambah penjenamaan untuk mengelakkan yang tidak dibenarkan pengedaran.
  • Storan Pangkalan Data: Simpan metadata imej dan butiran untuk mendapatkan semula yang cekap.

Kesimpulan

Dengan melaksanakan langkah yang digariskan dalam artikel ini, anda boleh meningkatkan keselamatan sistem muat naik imej anda dengan ketara dan melindungi tapak web anda daripada potensi kelemahan. Kod dan pengesyoran yang diberikan harus menjadi asas yang kukuh untuk pelaksanaan muat naik imej selamat anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Skrip Muat Naik Imej dengan Selamat untuk Mencegah Kerentanan?. 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