PDA

View Full Version : جلو گیری از آپلود فایل های مخرب



مهدی رحیم زاده
پنج شنبه 11 اردیبهشت 1393, 11:22 صبح
سلام به همه دوستان و اساتید محترم
میخواستم بدونم از چه راهی میشه جلوی آپلود فایل های مخرب (مثل shell) رو گرفت؟ من توضیحاتی در مورد htaccess توی php خوندم. میخواستم بدونم که برای ای اس پی هم همین راهکار ها هست؟
با تشکر

mRizvandi
پنج شنبه 11 اردیبهشت 1393, 12:09 عصر
توی سایت کلی در این خصوص بحث شده
دو راه کار کامل هم ارئه شده:
ابتدا در سمت کلاینت برای راحتی کاربر فایلها رو بررسی کنید
سپس در سمت سرور به دو صورت فایلهای رو بررسی کنید:
ابتدا پسوند فایلها رو بررسی کنید
سپس محتویات رو بررسی کنید
به این شکل شما مطمن خواهید بود که فایل مناسبی در جای مناسبی آپلود شده است.

meysam99
پنج شنبه 11 اردیبهشت 1393, 12:53 عصر
از همه مهمتر محتویات که سمت سرور چک شود

ali.n93
پنج شنبه 11 اردیبهشت 1393, 13:10 عصر
چطور میشه محتویات رو بررسی کرد؟

mRizvandi
پنج شنبه 11 اردیبهشت 1393, 15:11 عصر
از شی HttpPostedFile مقدار خصوصیت ContentType رو بررسی کنید.
مثال:

switch (oHttpPosted.ContentType)
{
case "image/pjpeg":
case "image/jpeg":
contentType = UploadedFileType.ImageJPG;
break;
...
}

Ahsani
پنج شنبه 11 اردیبهشت 1393, 23:57 عصر
حتی می تونی موقع آپلود هم بررسی کنی، مثلا تنها FileType های که مد نظر رو اجازه آپلود بدی . . .

mahdisky
جمعه 12 اردیبهشت 1393, 08:21 صبح
از شی HttpPostedFile مقدار خصوصیت ContentType رو بررسی کنید.
مثال:

switch (oHttpPosted.ContentType)
{
case "image/pjpeg":
case "image/jpeg":
contentType = UploadedFileType.ImageJPG;
break;
...
}

این مشکل رو حل نمیکنه
با تغییر پسوند فایل باز هم آپلود میشه.

majidnazari65
جمعه 12 اردیبهشت 1393, 10:54 صبح
این مشکل رو حل نمیکنه
با تغییر پسوند فایل باز هم آپلود میشه.

درسته. فکر میکنم برخی از مرورگرها مثل گوگل کروم ContentType رو بر اساس پسوند ارسال میکنه. بنابراین این روش جواب نمیده. میتونی از روشی که در این لینک (http://forums.asp.net/t/1331793.aspx?FileUpload+ContentType+trickery) به عنوان پاسخ علامت خورده استفاده کنی.

mRizvandi
پنج شنبه 18 اردیبهشت 1393, 14:23 عصر
درسته. فکر میکنم برخی از مرورگرها مثل گوگل کروم ContentType رو بر اساس پسوند ارسال میکنه. بنابراین این روش جواب نمیده. میتونی از روشی که در این لینک (http://forums.asp.net/t/1331793.aspx?FileUpload+ContentType+trickery) به عنوان پاسخ علامت خورده استفاده کنی.

کاملا درسته، بعد از چک کردن پسوند و ContentType در سمت کلاینت (که اصلا بحث امنیتی نداره و بیشتر برای کمک کردن به کاربر هست) و سپس چک کردن پسوند و ContentType در سمت سرور، دیگه تنها راهی که می مونه اینه که فایل رو باز کرد و امضای هدر فایل رو بررسی کرد. شاید تنها بررسی کردن امضای EXE, Com کفایت کنه. ولی اگر می خواهید موجودیت خود فایل رو بررسی کنید باید هدرهای فایلهای مورد نظرتون رو بشناسید:
امضای فایلهای اجرایی از قبیل EXE و DLL و ..: سه بایت ابتدایی 4D 5A 90
امضای فایلهای تصویری jpeg: چهار بایت ابتدایی: FF D8 FF E0
و....