application octet stream

- 1 سال پیش
توسط Igo آپدیت شد
سجاد ( 10401 تجربه )
1 سال پیش

سلام

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

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

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

سیدعلی موسوی ( 30181 تجربه )
1 سال پیش

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

getClientOriginalExtension();

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

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

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

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

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

سجاد ( 10401 تجربه )
1 سال پیش

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

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

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

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

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

سیدعلی موسوی ( 30181 تجربه )
1 سال پیش

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

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

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

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