یک اسکریپت PHP بنویسید که یک مسیر فایل/پوشه را دریافت کند و اگر مسیر یک پوشه بود با استفاده از is_dir لیست فایل‌ها را به‌صورت یک صفحه HTML نمایش دهد و اگر مسیر یک فایل بود آن را با هدرهای مناسب (Content-Type و Content-Disposition) برای دانلود ارسال کند.

7.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 03:13

0.0

برای حل این مسئله از توابع پایه‌ای PHP مانند is_dir برای تشخیص پوشه، scandir یا glob برای خواندن محتویات پوشه، و header به‌همراه readfile یا fpassthru برای ارسال فایل استفاده کنید؛ جهت تعیین نوع MIME می‌توانید از finfo_file یا mime_content_type بهره بگیرید. نکات امنیتی شامل اعتبارسنجی مسیر (جلوگیری از directory traversal با realpath و مقایسه با یک دایرکتوری پایه)، استفاده از basename برای نام فایل دانلودی و ارسال هدرهای مناسب قبل از خروجی (و فراخوانی exit بعد از ارسال فایل) است.

توسط پژوهشگر در 220 روز قبل ساعت 03:13
دسته بندی ها: PHP PHP for beginner
reyhaneh در 220 روز قبل ساعت 07:06

برای امنیت، مسیر ورودی را با realpath بررسی کنید و مطمئن شوید که واقعاً زیر دایرکتوری پایه پروژه قرار دارد تا از حملات directory traversal جلوگیری کنید. اگر is_dir باشد، با scandir یا glob محتوای پوشه را به‌صورت یک صفحه HTML لیست کنید. اگر فایل باشد، نوع MIME را با finfo_file تعیین کرده و هدرهای Content-Type و Content-Disposition مناسب با basename فایل را ارسال کنید و از readfile یا fpassthru برای خروجی استفاده کنید و در نهایت exit کنید. همچنین بهتر است قبل از ارسال هدرها خروجی دیگری وجود نداشته باشد (با ob_end_clean یا خاموش کردن خروجی) و اعتبار مسیر را با یک کانتکست امن نسبت به دایرکتوری پایه بررسی کنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری