راکت

application octet stream

6 پاسخ

سلام

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

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

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

ثبت پرسش جدید

پاسخ‌ها

6
سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

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

getClientOriginalExtension();

Igo
Igo
@Igo

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

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

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

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

شاید پاسخ شما همین‌جا باشد

سجاد
سجاد
@sajaddp

تخصص: برنامه نویس

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

Igo
Igo
@Igo

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

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

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

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

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

Igo
Igo
@Igo

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

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام