application octet stream

- 1 سال پیش
توسط Igo آپدیت شد
سجاد ( 10571 تجربه )
1 سال پیش
تخصص : برنامه نویس

سلام

گاهی اوقات هنگام آپلود تصاویر ( به خصوص تصاویری که کمی حجیم باشند یا از طریق دوربین گوشی گرفته شده باشند ) لاراول mimetype رو application/octet-stream تشخیص میده.

همون طور که می دونید این mime دایره گسترده ای رو شامل میشه و حتی ممکن هست فایل دریافتی تصویر نباشه و مثلا صوت و... باشه. ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types )

تا حالا کسی با این مسئله برخورد داشته؟ چه طور مدیریتش کردید؟
برای مثال اینکه اطمینان حاصل کنیم تصویر دریافتی jpg یا png هست.

سیدعلی موسوی ( 32106 تجربه )
1 سال پیش
تخصص : برنامه نویسی سی شارپ و لاراول

سلام
من از ولیدیتورهای لاراول برای عکس استفاده نمیکنم. چک میکنم اگر فایل بود بیا فرمتش رو چک کن اگر برابر فرمت های که تعریف کردم بود ادامه بده

getClientOriginalExtension();

Igo ( 3809 تجربه )
1 سال پیش

سلام
هر فایل دارای یک هدر می باشد.
این هدر برای هر فایل حجم متفاوتی داره که توی این هدر فایل خودش رو معرفی میکنه.
یعنی میتونیم ماهیت هویت فایل رو بدست بیاریم.

مثلا هدر فایل های Png معادل رشته زیر هستش و 8 بیت حجم داره
0x89504E470D0A1A0A

حالا هر فایل که از کلاینت به سرور رسیده اگه 8 بیت اولش برابر با رشته بالا باشه این فایل یک فایل Png هست.

چک کردن پسوند فایل هم ب نظرم اشتباه هستش چون کنه کاربر میتونه پسوند یک فایل exe رو به png یا هر چیز دیگه تغییر بده و بعد ارسال کنه.

سجاد ( 10571 تجربه )
1 سال پیش
تخصص : برنامه نویس

@juza۶۶
خب این منطقی نیست ممکنه کاربر extension فایل رو دستکاری کرده باشه.
+
@lgo
ایده خوبی هست ولی چه طور اعمال کنیم؟! فایل رو باینری کنیم و بعد چک کنیم؟

Igo ( 3809 تجربه )
1 سال پیش

میتونی توی دیتابیس یه جدول ایجاد کنی که 3تا ستون داشته باشه ( پسوند فایل , هدر فایل , حجم هدر فایل)
بعد پسود فایلی از کلاینت بدستت رسیده رو بگیر و توی دیتابیس بگرد اگه همیچین پسوندی وجود نداشت که فایل اجازه آپلود نداره

اگه وجود داشت که باید هدرش رو از دیتابیس بگیری و با هدر فایلی که رسیده شده مقایسه کنی.
فقط حواست باشه که بعضی از فایل ها چند تا دارای چند تا هدر هستند.
مثلا فایل های JPG رو با 3 تا هدر ریز میشه تشخیص داد.

"0xFFD8FFE0"
"0xFFD8FFE1"
"0xFFD8FFE8"

سیدعلی موسوی ( 32106 تجربه )
1 سال پیش
تخصص : برنامه نویسی سی شارپ و لاراول

به نظرم کار رو خیلی پیچیده میکنید، اینجور فیلتر و چک کردن ها نمیتونه به این سادگی باشه، به نظرم همون سمت لاراول چک بشه mime یا از پکیچ Intervention که مخصوص کار با عکسه استفاده بشه بهتر و سریعتر و امن تر ، نمیشه با چند هدر فهمید عکس هس یا نه

Igo ( 3809 تجربه )
1 سال پیش

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

برای ارسال پاسخ باید وارد سایت شوید