موضوعات پیشرفته · ۹ دقیقه مطالعه

آپلود فایل (امن)

آپلود فایل یکی از خطرناک‌ترین بخش‌هاست؛ با دقت انجامش بده.

فرم آپلود

<form method="POST" enctype="multipart/form-data">
  <input type="file" name="avatar">
  <button>آپلود</button>
</form>

enctype="multipart/form-data" برای آپلود الزامی است.

پردازش

<?php
$file = $_FILES['avatar'];

// ۱) بررسی خطا
if ($file['error'] !== UPLOAD_ERR_OK) { exit("خطا در آپلود"); }

// ۲) بررسی حجم
if ($file['size'] > 2_000_000) { exit("حجم زیاد"); }

// ۳) بررسی نوع واقعی (نه پسوند!)
$allowed = ['image/jpeg', 'image/png'];
$mime = mime_content_type($file['tmp_name']);
if (!in_array($mime, $allowed)) { exit("نوع مجاز نیست"); }

// ۴) نام امن و تصادفی
$name = bin2hex(random_bytes(8)) . '.jpg';
move_uploaded_file($file['tmp_name'], "uploads/$name");

⚠️ قوانین امنیتی حیاتی

  • نوع فایل را با محتوای واقعی چک کن (mime_content_type)، نه پسوند.
  • نام فایل را خودت بساز (تصادفی)، نه نام کاربر.
  • پوشهٔ آپلود را خارج از دسترس اجرا بگذار (فایل‌ها اجرا نشوند).
  • حجم را محدود کن.

آپلودِ ناامن، راه نفوذ شمارهٔ یک به سرور است. این درس را جدی بگیر.

برای ثبت پیشرفت و کسب XP وارد شو.

ورود به میدان
→ include و کار با فایل
کوکی و نشست (Session) ←