PDA

View Full Version : حرفه ای: دریافت فرمت وافعی فایل آپلود شده



aspismylove
شنبه 30 دی 1391, 06:39 صبح
سلام دوستان خسته نباشید

من میخام کاربر وقتی داره فایل آپلود میکنه اگه فرمت الکی داده باشه بفهمم ، یعنی ببینید : من میخام کاربر فقط عکسهای با پسوند .jpg آپلود کنه .

یعنی اگه اومد این کار و کرد بفهمم : default.aspx.jpg و بهش بگم که نوع عکس انتخابی قابل قبول نیس !!!!

ممنون

اوبالیت به بو
شنبه 30 دی 1391, 11:33 صبح
درود بر شما

اطلاعات هر فایل در بخش به نام Head فایل ذخیره میشه که شناسنامه فایل هست. شما باید به اون قسمت دسترسی داشته باشید و بوسیله این دستور:


FileUpload1.PostedFile.ContentType

اما پسوند فایل ها در وب متفاوت هست. شما باید از جدول MIME Type (http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDEQFjAA&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FInterne t_media_type&ei=Z036UIKVL4b14QTxrICgDw&usg=AFQjCNFFKTowLsizVRrp2QKQWZ4xK1V2XQ&sig2=0c50z7kCVsfapX2i8PsWmQ&bvm=bv.41248874,d.d2k) انواع فایل رو جدا کنید و با اون مقایسه کنید. مثلا برای فایل های jpg :


string FileExtension = FileUpload1.PostedFile.ContentType;

if(FileExtension == "image/jpg" || FileExtension == "image/jpeg")
return true;

minaalamshahi
دوشنبه 14 مرداد 1392, 12:21 عصر
این جواب نمیده

mohammad kafiyan
دوشنبه 14 مرداد 1392, 14:56 عصر
این جواب نمیده

یعنی چی که جواب نمی دهد؟؟؟؟؟

hamedd82
دوشنبه 14 مرداد 1392, 16:43 عصر
یعنی چی که جواب نمی دهد؟؟؟؟؟
یعنی کاربر اگر یک فایل متنی داشته باشه و پسوند فایلشو به jpg تغییر بده این کد این فایل رو به عنوان عکس میشناسه و قبول میکنه که این خیلی مشکل ساز میشه

jafar01
دوشنبه 14 مرداد 1392, 23:14 عصر
اره بتونه فرمتشو تغییر بده نمیشه شناخت

minaalamshahi
سه شنبه 15 مرداد 1392, 00:51 صبح
این لینک رو هم بررسی کردم جواب نمیده
http://barnamenevis.org/showthread.php?299593-وقتی-پسوند-فایل-رو-تغییر-میدم-موقع-آپلود-contenttype-اونو-تشخیص-نمیده-و-فایل-رو-مجاز-میشناسه

واقعا راهی برای تشخیص نوع فایل وقتی پسوند دستکاری بشه وجود نداره؟

General-Xenon
سه شنبه 15 مرداد 1392, 09:56 صبح
این لینک رو هم بررسی کردم جواب نمیده
http://barnamenevis.org/showthread.php?299593-وقتی-پسوند-فایل-رو-تغییر-میدم-موقع-آپلود-contenttype-اونو-تشخیص-نمیده-و-فایل-رو-مجاز-میشناسه

واقعا راهی برای تشخیص نوع فایل وقتی پسوند دستکاری بشه وجود نداره؟


try
{
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(new System.IO.MemoryStream(fileup1.FileBytes));
// True
// آماده تغییر و هرگونه ویرایش
{
System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(bmp);
}
System.IO.MemoryStream ms = new System.IO.MemoryStream();
// تعیین فرمت ذخیره سازی
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Dispose();

//
byte[] _uploadedData = ms.ToArray();
}
catch
{
// Not Ready
}

minaalamshahi
سه شنبه 15 مرداد 1392, 10:12 صبح
این که فقط برای تصاویر هست
بقیه فایلها چی؟

minaalamshahi
چهارشنبه 16 مرداد 1392, 09:51 صبح
کسی راهی نداره

اوبالیت به بو
چهارشنبه 16 مرداد 1392, 11:53 صبح
این که فقط برای تصاویر هست
بقیه فایلها چی؟

لیست MIME Type ها رو مطالعه کنید.

minaalamshahi
چهارشنبه 16 مرداد 1392, 12:04 عصر
mime TYPE ها رو بلدم
برای روش دوستمون
General-Xenon (http://barnamenevis.org/member.php?138571-General-Xenon)
کاربردش رو نمی دونم

اون فقط داره عکس با فرمت تصویر ذخیره میکنه میگه اگه نشد پس تصویر نبوده
System.IO.MemoryStream ms = new System.IO.MemoryStream();
// تعیین فرمت ذخیره سازی
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
اما خوب بقیه فایلها چی
حتما که همه تصویر نیستن

CONTENTtYPE هم که روی مرورگرهای مختلف جواب نمیده
و GETextension هم که راه مناسبی نیست
روش لینک http://barnamenevis.org/showthread.php?299593-وقتی-پسوند-فایل-رو-تغییر-میدم-موقع-آپلود-contenttype-اونو-تشخیص-نمیده-و-فایل-رو-مجاز-میشناسه
هم که بهم جواب نداد مثل contenttype

General-Xenon
چهارشنبه 16 مرداد 1392, 19:03 عصر
mime TYPE ها رو بلدم
برای روش دوستمون
General-Xenon (http://barnamenevis.org/member.php?138571-General-Xenon)
کاربردش رو نمی دونم

اون فقط داره عکس با فرمت تصویر ذخیره میکنه میگه اگه نشد پس تصویر نبوده
System.IO.MemoryStream ms = new System.IO.MemoryStream();
// تعیین فرمت ذخیره سازی
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
اما خوب بقیه فایلها چی
حتما که همه تصویر نیستن

CONTENTtYPE هم که روی مرورگرهای مختلف جواب نمیده
و GETextension هم که راه مناسبی نیست
روش لینک http://barnamenevis.org/showthread.php?299593-وقتی-پسوند-فایل-رو-تغییر-میدم-موقع-آپلود-contenttype-اونو-تشخیص-نمیده-و-فایل-رو-مجاز-میشناسه
هم که بهم جواب نداد مثل contenttype

سلام مجدد

ببینید شما مد نظرتون چه فایلی هست ؟
اکثرا فایل های که آپلود میشن ، عکس هست . درسته ؟ خوب امکان آپلود Shell اکثرا در این فرمت ها صورت میگیره . شما فرمت دیگه ای مثل چی مد نظرتون هست که باید چک کنین که کاربر درست آپلود کنه ؟
Script ? خوب این کار رو باید با استفاده از توابع Shell چک کنید ...
HTML ? آدرس ها رو درون فایل چک کنید تا ببینید به Script یا صفحه Shell منتهی میشه ..
در غیر این صورت تنها کدی که من تونستم کاربر را راهنمایی کنم تا فایل رو درست آپلود کنه همین کد هست... اگر مد نظرتون فایل هایی بود که امکان *** سایتتون وجود داره رو بگین من بررسی کنم .
کلا برای جلوگیری از اختلال در سایت پسوند هایی که معمولا در HTML شناخته میشن رو بررسی می کنن ... مثل عکس ها یا کد های Script در غیر این صورت مشکلی برای طراحی شما پیش نمیاد...

minaalamshahi
پنج شنبه 17 مرداد 1392, 10:55 صبح
من فایلهای pdf و word2003,2007و image,rtf,txtو ...رو باید امکان آپلود داشته باشم

اما میخوام مطمئن باشم کاربر من فایل دیگه ای رو rename نکرده باشه و پسوندش رو عوض کرده باشه به جای این فایلها آپلود کنه.

General-Xenon
پنج شنبه 17 مرداد 1392, 11:30 صبح
من فایلهای pdf و word2003,2007و image,rtf,txtو ...رو باید امکان آپلود داشته باشم

اما میخوام مطمئن باشم کاربر من فایل دیگه ای رو rename نکرده باشه و پسوندش رو عوض کرده باشه به جای این فایلها آپلود کنه.

ببین فایل های image , txt رو باید چک کنی چون این فایل ها مستقیما در مرورگر بارگزاری میشن... ما بقی یا میرن واسه دانلود یا مثل PDF ابزار خاص خودش رو باز میکنه و درصورت اشتباه آپلود کردن در نهایت به هیچ جایی نمی رسه...

می مونه فایل های image , txt ... خب txt که اصلا جای نگرانی نیست چون هرچی هم آپلود کرده باشه بصورت TXT بر میگردونه.. یعنی فقط نوشته درون فایل حالا هرچی میخواد باشه ...

عکس هم که همون کد ...

در نهایت شما اگر خواستی محدود کنی پسوند ها رو چک کن که مثلا جز عکس و PDF چیزی رو آپلود نکنه ....
موفق باشی

minaalamshahi
پنج شنبه 17 مرداد 1392, 12:04 عصر
در نهایت شما اگر خواستی محدود کنی پسوند ها رو چک کن که مثلا جز عکس و PDF چیزی رو آپلود نکنه ....
موفق باشی

من دقیقا همین کار رو می خوام بکنم
اما چک کردن پسوند راه مناسبی نیست با توجه به تاپیک های بالا

اوبالیت به بو
پنج شنبه 17 مرداد 1392, 13:18 عصر
من دقیقا همین کار رو می خوام بکنم
اما چک کردن پسوند راه مناسبی نیست با توجه به تاپیک های بالا

شما باید هدر فایل رو بخونید.

در پست شماره 2 هم من گفتم که چطور از هدر فایل، نوع فایل رو بخونید و تشخیص بدید.
لیست MIME Type ها هم در اختیارتون هست.

مشکل ؟

minaalamshahi
پنج شنبه 17 مرداد 1392, 15:32 عصر
شما باید هدر فایل رو بخونید.

در پست شماره 2 هم من گفتم که چطور از هدر فایل، نوع فایل رو بخونید و تشخیص بدید.
لیست MIME Type ها هم در اختیارتون هست.

مشکل ؟

ممنونم ولی همون طور که شما در پست 2 و11 و17 گفتین

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

اوبالیت به بو
پنج شنبه 17 مرداد 1392, 15:54 عصر
در جواب گفتم که وقتی پسوند فایل به صورت دستی عوض میشه توی بعضی مرورگرها این مسئله رو تشخیص نمیدن و نوع فایل رو به غلط درست تشخیص میدن و فایل دستکاری شده آپلود میشه که نباید بشه


آقا ما چه کار به پسوند فایل داریم؟ ما داریم از هدر فایل نوع فایل رو می خونیم. ما کاری به پسوند نداریم.

شما وقتی پسوند رو مستقیم از طریق متد FileExtension بخونید یا بیاید FileName رو بگیرید و 3 کاراکتر آخر رو استخراج کنید حرف شما درست میشه اون موقع فایل photo1.exe.jpg رو تشخیص نمی ده. اما ما پسوند فایل رو جستجو نمی کنیم. اصلا کاری نداریم به پسوند فایل. یه فایل ممکنه چند پسوند داشته باشه: photo.exe.jpg.mp3

minaalamshahi
پنج شنبه 17 مرداد 1392, 22:27 عصر
من نگفتم من از FileExtension یا FileName استفاده کردم

لطفا با دقت بخونین

اگر منظوری جز این دارین
ممنون میشم راه حلتون رو توی چند خط کد ببینم

اوبالیت به بو
جمعه 18 مرداد 1392, 00:36 صبح
ممنونم ولی همون طور که شما در پست 2 و11 و17 گفتین

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

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

شما کدی که من گفتم رو تست کردید؟ روی چه فایلی تست کردید و جواب نگرفتید؟ ممکنه کدی رو که قرار دادید و جواب نگرفتید رو اینجا قرار بدید؟

mohsen_1687
جمعه 18 مرداد 1392, 00:54 صبح
دوست خوب من، مساله اینجاست که مرورگر نمیاد برای شما نوع فایل رو تشخیص بده. شما در سمت سرور بررسی رو انجام می دید.

شما کدی که من گفتم رو تست کردید؟ روی چه فایلی تست کردید و جواب نگرفتید؟ ممکنه کدی رو که قرار دادید و جواب نگرفتید رو اینجا قرار بدید؟

با سلام خدمت دوست عزیز ؛ من از mime type قبلا استفاده کردم ولی جولب نداد و خیلی راحت فایل های مخرب رو اپلود کردم دلیلشم اینه که هدر فایل میاد نوع فایلو از رو پسوند خود فایل تشخیص میده و وقتی شما پسوند فایل رو عوض میکنید هدرش هم تغییر میکنه

minaalamshahi
جمعه 18 مرداد 1392, 02:27 صبح
دوست خوب من، مساله اینجاست که مرورگر نمیاد برای شما نوع فایل رو تشخیص بده. شما در سمت سرور بررسی رو انجام می دید.

شما کدی که من گفتم رو تست کردید؟ روی چه فایلی تست کردید و جواب نگرفتید؟ ممکنه کدی رو که قرار دادید و جواب نگرفتید رو اینجا قرار بدید؟

خیلی ممنون آقا محسن واقعا خوشحال شدم که یه نفر مشکل من رو فهمید



switch (FileUpload1.PostedFile.ContentType) {
case "image/png":
fileformat = "png";
Valid = true;
break;
case "image/gif":

fileformat = "gif";
Valid = true;
break;
case "image/jpeg":
fileformat = "jpg";
Valid = true;
break;
case "image/jpg":
fileformat = "jpg";
Valid = true;
break;
}

General-Xenon
جمعه 18 مرداد 1392, 10:39 صبح
ببینید برای چک کردن نیاز نیست همه پسوند ها بررسی بشه چون نیازی نیست ... مثلا PDF :
خب این پسوند چه خطری میتونه داشته باشه ؟ هیچ خطری نداره . کاربر شما اگر هم فایلی رو دستکاری هم کنه 2 مورد براش پیش میاد .. یکی اینکه خود Adobe Reader یا حالا نرم افزار مربوط به فایل باز میشه و نمایش میده یا اینکه میره واسه Download .... جز این نمیتونه استفاده ای کنه .. پس نیاز نیست نگران چیزی باشید .. مشکل اصلی بر سر فایل هاییست که امکان استفاده ازش میره ... مثل عکس ها و Script ها و یا Page Format ها

byte[] _dataFile;
switch (flp1.PostedFile.ContentType)
{
case "image/png":
case "image/gif":
case "image/jpg":
case "image/jpeg":
case "image/jpe":
case "image/bmp":
try
{
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(new System.IO.MemoryStream(flp1.FileBytes));
_dataFile = flp1.FileBytes;
}
catch
{
_dataFile = new byte[0];
}
break;
case "application/msword": // WORD FILE
case "application/pdf": // PDF FILE & ...
_dataFile = flp1.FileBytes;
break;
default: // Return 0 byte
_dataFile = new byte[0];
break;
}


خطری وجود نداره... فقط اینکه شما باید محدود کنید که مثلا فقط PDF رو Upload کنن ... همین

mohsen_1687
جمعه 18 مرداد 1392, 13:44 عصر
منم با این روش دوست خوبم General-Xenon موافقم
واسه عکسا میشه از این زوش استفاده کزد و واسه باقی فایل ها میتونی از همون روش قبلیت استفاده کنی

اوبالیت به بو
شنبه 19 مرداد 1392, 16:53 عصر
واسه عکسا میشه از این زوش استفاده کزد و واسه باقی فایل ها میتونی از همون روش قبلیت استفاده کنی

یعنی کدوم روش؟

یک روش مشابه:
http://forums.asp.net/post/set/18/1331793/2680667