PDA

View Full Version : روش تشخیص دقیق فایل ویدیویی ؟؟؟



reza-alborz
سه شنبه 12 آبان 1394, 18:31 عصر
سلام و احترام

دوستان چگونه میشه در php فایل ویدیویی رو دقیقا تشخیص داد ؟؟؟

روش های مختلفی رو امتحان کردم ولی بعضی از فایل های ویدیویی رو تشخیص نمیده !
مثلا تو این روش پسوند های dat یا mts رو تشخیص نمیده


$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($name);


دوستان محترم اگر روشی دارین لطفا راهنماییم بفرمائین

reza-alborz
سه شنبه 12 آبان 1394, 18:55 عصر
آیا از لحاظ امنیتی درسته که بعد از گرفتن نام فایل پسوندش رو استخراج کنیم؟؟؟

pbm_soy
سه شنبه 12 آبان 1394, 22:26 عصر
قبلا این موارد مفصل دراین سایت مطرح شده است سرچ کنید

بررسی کردن فقط پسوند فایل خوب است ولی کافی نیست وموارد دیگری هم وجود دارد که باید بررسی شوند مانند
حجم فایل
نوع فایل که باید با پسوند و محتوا و هدر فایل متناسب باشد
حتی میتوانید کل محتوای فایل را بخوانید و بررسی کنید تا محتوا دقیقا محتوای یک فایل فیلم باشد
کار دیگر میتوانید محل آپلود کردن فایل را محافظت کنید و به آن خصیصه های درست را بدهید و یا در جاهای خاص آپلود کنید مانند در دیتابیس و یا در خارج از هاست

reza-alborz
چهارشنبه 13 آبان 1394, 07:58 صبح
ممنون از پاسخگوییتان ، تمامی موارد را مورد بررسی قرار دادم ، فقط در بدست آوردن واقعی نوع فایل موندم

reza_101010
چهارشنبه 13 آبان 1394, 09:11 صبح
سلام اینا دانلود کنین
http://s6.picofile.com/file/8220845526/phpmimetypeclass_2010_10_19.zip.html
کلاس تشخیص نوع فایل :قلب:

reza_101010
چهارشنبه 13 آبان 1394, 09:14 صبح
private function getExtension($file = NULL) {
if(!is_null($file)) {
$ext = strtolower(array_pop(explode('.', $file)));
return $ext;
} else return "##INVALID_FILE##FILE=".$file."##";
}
}

reza-alborz
چهارشنبه 13 آبان 1394, 09:22 صبح
شما پسوند فایل را جدا کرده و طبق پسوند تشخیص میدین ، این روش رو من امتحان کردم خوبه ، ولی امکان تغییر پسوند توسط کاربر وجود نداره ؟

reza_101010
چهارشنبه 13 آبان 1394, 18:35 عصر
سلام بصورت منطقی:

ما باید بفهمیم فایلی که ارسال شده پسوندش چیه هر سیستم عاملی یا برنامه ای فابل را بر اساس پسوندش تشخیص میده . قبول دارین؟
مگه اینکه جور دیگه ای باشه :متفکر:
خوب حالا وقتی فایل ارسال شد وقتی هم پسوندش یه چی دیگه باشه متفاوت با اینکودی که انجام شده سیستم عامل یا در نهایت همون آپاچی ارور میده (شما اینا امتحان کن بعد لاگ بگیر کپی لاگ اپاجی رو هم یزار اینجا ببینیم ) ولی چون تموم این کارا تو سرور انجام میشه و اجرا شدن بر اساس پسوند فایل هست و تعداد پسوند های خاصی برای امنیت مشکل دارند که اوانا را فیلتر می کنیم فکر نمی کنم مشکلی باشه تا ببینیم اساتید نظرشون چیه

Unique
چهارشنبه 13 آبان 1394, 20:07 عصر
ما باید بفهمیم فایلی که ارسال شده پسوندش چیه هر سیستم عاملی یا برنامه ای فابل را بر اساس پسوندش تشخیص میده . قبول دارین؟
خیر - فقط ویندوز اینطوریه.


در مورد بحث امنیت ارسال فایل توصیه میکنم این پست من توی وبلاگم (http://www.geekfarsi.com/%D9%88%D9%82%D8%AA%DB%8C-%D8%AA%D9%88%DB%8C-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A7%D8%B2-%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA-file-upload-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D9%85%DB%8C%DA%A9%D9%86/377) را مطالعه کنین.

در مورد تشخیص نوع فایل همون finfo به نظرم باید درست کار کنه. فقط سورس کدی که نوشتین غلطه فکر کنم :

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $filepath);

در نظر داشته باشین پسوند dat برای vcd ها هست تا اونجا که من میدونم و فرمت درست و درمونی نیست. در واقع dat همون mpeg2 هست و کلا معتبر نیست. MTS هم همون Mpeg2 با کیفیت hd روی 720p و 1080p هست و فقط توسط سونی و پاناسونیک روی camcoder ها دیده میشه.

من نمیدونم شما میخواین چیکار کنین اما این پسوند ها که میگین کلا اعتباری روی وب ندارن. اگه توضیح بدین مشکلتون چیه شاید بهتر بشه راهنمایی کرد.

اگه روی سرور بتونین از ffmpeg استفاده کنید میتونید خروجی دستور ffmpeg -i FILE_PATH را با php بررسی کنید. این دستور اگه فایلی که بهش میدین video باشه توضیحات خوبی در موردش میده و در مورد فایل های دیگه مثلا میگه ther is no stream found.

امیدوارم موفق باشین.

reza-alborz
پنج شنبه 14 آبان 1394, 07:56 صبح
ممنون از تمامی دوستان ، اول از همه به این نتیجه رسیدم که در کل اگر بیایم پسوند فایل را جدا کرده و طبق اون اعتبار سنجی کنیم اصلا منطقی نیست ، چون به راحتی میشه پسوند رو عوض کرد . پس همون تابع finfo بنظر بهترینه . در جواب به unique عزیز که من میخوام کاری کنم که کاربر فقط بتونه فایل ویدیو بفرسته ، فقط فایل ویدیو ، حالا هر پسوندی . در مورد ffmpeg هم پیشنهاد خوبیه فقط اگر همیشه اخطارش یکی باشه و بتونم طبق اون اخطار اعتبار سنجی کنم ، عالیه

Unique
پنج شنبه 14 آبان 1394, 13:59 عصر
در جواب به unique عزیز که من میخوام کاری کنم که کاربر فقط بتونه فایل ویدیو بفرسته
ببینین ، منظور من این بود که میخواین چه استفاده ای ار فایل بکنید ؟ میخواین توی Player پخشش کنین ؟‌ میخواین convert کنین ؟‌ میخواین بعدا دانلود بشه ازش استفاده بشه ؟
آخه معمولا بسته به کاری که قرار هست روی فایل انجام بشه محدودیت ایجاد میکنن. مثلا اگه قرار هست توی نت پخش بشه فقط کاربر را باید محدود کنیم Mp4 یا Ogg بفرسته. منظورم این بود. تا حالا ندیدم فایل dat یا mts جایی توی وب کاربرد داشته باشه.


در مورد ffmpeg هم پیشنهاد خوبیه فقط اگر همیشه اخطارش یکی باشه و بتونم طبق اون اخطار اعتبار سنجی کنم
اگه بتونی command بزنی فقط ffmpeg نیست و کلی برنامه دیگه هم هست (مثلا avinfo هم برنامه خوبیه) که بالاخره یکیش قابل استفاده خواهد بود. عموما خروجی عدم تشخیص فایل ویدئویی یک چیزه و باید بشه اعتبار سنجیش کرد.

reza-alborz
پنج شنبه 14 آبان 1394, 15:18 عصر
بله ، میخوام بعد از دریافت فایل ویدیویی ، پردازش بشه توسط ffmpeg

reza-alborz
پنج شنبه 14 آبان 1394, 15:22 عصر
البته با تشکر از تمامی دوستان ، به یک جواب منطقی و کلی رسیدم

reza-alborz
شنبه 16 آبان 1394, 14:14 عصر
ببخشید unique عزیز درمورد اینکه در وبلاگتون گفتین خارج از Document Root آپ بشه ، بیشتر توضیح میدین ؟

Unique
یک شنبه 17 آبان 1394, 00:36 صبح
Document Root همون public_html یا www یا wwwroot هست. منظورم اینه میتونی یک پوشه بالاتر از اون بسازی و فایل ها را بگذرای توی اون ! اینجوری کسی نمیتونه به هیچ وجه آدرس بده برای دسترسی به فایل.

reza-alborz
یک شنبه 17 آبان 1394, 07:27 صبح
Document Root همون public_html یا www یا wwwroot هست. منظورم اینه میتونی یک پوشه بالاتر از اون بسازی و فایل ها را بگذرای توی اون ! اینجوری کسی نمیتونه به هیچ وجه آدرس بده برای دسترسی به فایل.
ممنون ، اگر فایل ها تو ساب دومین باشه فکر کنم بهتر هم باشه؟

Unique
یک شنبه 17 آبان 1394, 14:04 عصر
اگر فایل ها تو ساب دومین باشه فکر کنم بهتر هم باشه؟
اگه توی subdmoain باشه باز هم از طریق مرورگر قابل دسترسیه (مگه اینکه permission عوض کنی یا با htaccess. دسترسی را ببندی). منظورم کلا بیرون از دسترسی آنلاین بازدیدکنندگان بود.

reza-alborz
یک شنبه 17 آبان 1394, 18:43 عصر
آخه در این صورت نمیتونم واسه دانلود بزارم ، درسته ؟

Unique
دوشنبه 18 آبان 1394, 01:46 صبح
آخه در این صورت نمیتونم واسه دانلود بزارم ، درسته ؟
چرا ، از طریق php میتونی Header برای download بفرستی و محتویات فایل را با readfile ارسال کنی یا از XSendFile استفاده کنی. در مورد ارسال فایل از طریق php توی انجمن جستجو کن خیلی پست پیدا میکنی. XSendFile هم برخی شرکت های هاست ارائه میدن میتونی روی سرور اختصاصی هم نصبش کنی.

reza-alborz
دوشنبه 18 آبان 1394, 07:31 صبح
خیلی ممنون