PDA

View Full Version : حرفه ای: سوال در باره avatar و امنیت سایتم



khadem1386
سه شنبه 08 شهریور 1390, 13:42 عصر
سلام به دوستان

یک صفحه ای در سایت خودم گذاشتم که هر کدام از اعضا می توانند یک فایل
jpg
را آپلود کنند و به این ترتیب در سایت ما دارای
AVATAR
یا عکس کوچک خود شوند.

نکته ای که مهم است این است که اگر یک
بدخواه و بداندیش بجای فایل jpg برای من فایلی حاوی کدهای مخرب از نوع asp یا جاوا xss و غیره را upload کند آن وقت ممکن است که سایت ما را هک کند.

راه عملی مقابله با این مشکل به چه صورت است.

آیا می توانم متن و کداسکی داخل یک فایل jpg را خودم scan کنم و اگر یک jpg واقعی بود آنگاه آنرا در داخل سرور ذخیره کنم؟

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

آیا اصولا خطری از این بابت مرا تهدید می کند؟
یا نگرانی من بی مورد است.




آیا با این روشهایی که شما می گید اگر یک دوستی آمد و یک فایل exe را با پسوند jpg گذاشت و آپلود کرد دیگه مشکلی پیش نمی یاد؟
یعنی اگر فقط پسوند را چک کنیم کافیته؟

راستی در مورد محدودیت حجمی چند کیلو بایت به پایین نمی شه فایلهای مخرب فرستاد؟


خیلی متشکرام

Saman Hashemi
سه شنبه 08 شهریور 1390, 13:52 عصر
با استفاده از كد زير ميتونيد فرمت هاي ورودي چك كنيد...!
براي سوال دومتونم نه وقتي فرمت ها چك شوند مشكلي پيش نمياد فقط از فايل back up تهيه كنيد...!
string pathImage = Server.MapPath(".") + "\\Download\\";
//تعيين فرمت
String[] validext = { ".jpg", ".jpeg", ".jfif", ".jpe", ".png", ".gif", ".tiff", ".tif", ".bmp" };
string ext = System.IO.Path.GetExtension(FileUploadImage.Posted File.FileName);
if (Array.IndexOf(validext, ext.ToLower()) < 0)
{
//براي آپلود فرمت هاي تعيين شده
LabelError.Text = "قادر به آپلود فایل با این فرمت نیستید";
LabelError.Visible = true;
return;
}
string ImageFileName = System.IO.Path.GetFileName(FileUploadImage.PostedF ile.FileName);
while (System.IO.File.Exists(pathImage))
{
//برای جلوگیری از عکس تکراری
ImageFileName = "1" + ImageFileName;
}
FileUploadImage.PostedFile.SaveAs(pathImage + ImageFileName);

milade
سه شنبه 08 شهریور 1390, 13:57 عصر
سلام
کافیه فرمت فایل کاربر رو چک کنی با یه RegularExpressionValidator و نسبت بدی یه فایل اپلودر .

نمونه کد :



<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="up_image" ErrorMessage="*"
ValidationExpression="(.*)?(.[jJ][pP][gG])$"></asp:RegularExpressionValidator>


وقتی فایل jpg اپلود شه حتی اگر حاوی کد asp باشه بی تاثیر هست و IIS اون رو در قالب یک Response میشناسه و پردازشی روش انجام نمیده .
اما ممکنه که ویروسی باشه که اون دیگه دست سرورت هست که ویروسیابش چه طوری عمل کنه .

فرق کد من با کد بالایی اینه که کاربر دیگه لازم نیست فایل اپلود بشه ( چون پروسه اپلود انجام میشه و اون وقت سرور چک میکنه فایل رو طبق کد بالا که یکی از دوستان گزاشتند ) و تحت جاوا اسکریپت خطا داده میشه.

موید باشید

Saman Hashemi
سه شنبه 08 شهریور 1390, 14:31 عصر
حالا كه بحث به اينجا رسيد بهتر نيست هر دوتاش باشه؟هم سمت كلاينت و هم سمت سرور چون احتمال داره سمت كلاينت validation دور زد...!
(البته من هيچ وقت Validationهاي مهم سمت كلاينت نميكنم چون راه ميشه ازش رد شد...!)

milade
سه شنبه 08 شهریور 1390, 14:41 عصر
البته نکته شما هم قابل عرض یابی هست .

مثلاً یکی از دلایل شما میتونه غیر فعال کردن جاوااسکریپت باشه .
که در پاسخ باید گفت میشه به جای اینکه یک فایل 10 گیگی رو که کاربر برای اتک اماده کرده تا ترافیک سرور رو ببلعه ، چک کرد اگر جاوااسکریپت فعال نبود کلاً سایت نشون داده نشه .

یا اینکه یک مشخصه به نام ISValid در کنترل های امنیتی وجود داره تا از اعتبار سنجی اطمینان حاطل کنیم ....

در حال ، این طور هم که شما میفرمایید ولیدیتور ها قابل دور زدن نیستند .

موفق باشید

Saman Hashemi
سه شنبه 08 شهریور 1390, 14:54 عصر
که در پاسخ باید گفت میشه به جای اینکه یک فایل 10 گیگی رو که کاربر برای اتک اماده کرده تا ترافیک سرور رو ببلعه ، چک کرد اگر جاوااسکریپت فعال نبود کلاً سایت نشون داده نشه .
كاملا درسته اما حجم ارسالي fileUpload ميشه تنظيم كرد و بهش TimeOut داد...!
اما بايد قبول كرد ميشه سمت كلاينت دور زد كافيه صفحه اعتبارسنجي شده را قبل از رسيدن به سرور گير انداخت مقاديرشو عوض كرد...!
امنيت نسبي بخوان حمله كنن ميكنن راه براي اين كار زياده...:افسرده:
الان كه خوب فكر ميكنم پيشنهادم همون استفاده از هر دوتاست...!
لااقل كار براي طرف سختتر ميكنيم...!:چشمک:

milade
سه شنبه 08 شهریور 1390, 15:14 عصر
اما بايد قبول كرد ميشه سمت كلاينت دور زد كافيه صفحه اعتبارسنجي شده را قبل از رسيدن به سرور گير انداخت مقاديرشو عوض كرد...!

لطفاً بیشتر توضیح بدید .

الان كه خوب فكر ميكنم پيشنهادم همون استفاده از هر دوتاست...!

همین طوره ..

Saman Hashemi
سه شنبه 08 شهریور 1390, 15:41 عصر
اگه اشتباه نكنم به اين روش ميگن حملات Man in the middle (https://www.owasp.org/index.php/Web_Parameter_Tampering)...!

khadem1386
چهارشنبه 09 شهریور 1390, 10:44 صبح
آیا با این روشهایی که شما می گید اگر یک دوستی آمد و یک فایل exe را با پسوند jpg گذاشت و آپلود کرد دیگه مشکلی پیش نمی یاد؟
یعنی اگر فقط پسوند را چک کنیم کافیته؟

راستی در مورد محدودیت حجمی چند کیلو بایت به پایین نمی شه فایلهای مخرب فرستاد؟

milade
چهارشنبه 09 شهریور 1390, 11:00 صبح
اگه اشتباه نكنم به اين روش ميگن حملات Man in the middle (https://www.owasp.org/index.php/Web_Parameter_Tampering)...!


عزیزم این روش مال دوره محمد شاه قاجار هست که می اومدند این طوری حمله میزندند .
الان همه برنامه نویس ها به ارسهال های پارامتریک به SQL کار میکنند .

ضمناً این روش حمله هیچ ربطی به موضوع ما نداشت ...

یعنی اگر فقط پسوند را چک کنیم کافیته؟

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

راح حل اینه که یا سرورتون انتی ویروس قوی داشته باشه تا فایلهای مخرب رو پاک کنه ، یا شما یه سرور اختصاصی بگیرید تا بتونید با روش هایی که وجود داره PROCESS ران کنید توی سرور .که مستلزم دسترسی بالا هستش .و هیچ هاست اشتراکی این دسترسی رو بهتون نمیده .

راستی در مورد محدودیت حجمی چند کیلو بایت به پایین نمی شه فایلهای مخرب فرستاد؟
نمیشه قضاوت کرد .
یه فایل مخرب میتونه حجمی بین 1 کیلو بایت تا 10 گیگ داشته باشه .
ممکنه Trojan رو بگزارند توی نرم افزار فتوشاپ که مثلاً اپلود میکنند .
نرم افزار همه چیزش درسته و حجمش 500 مگ هست .اما یه فایل 1 کیلو بایتی تروجان هم با خودش داره !

موفق باشید

khadem1386
چهارشنبه 09 شهریور 1390, 13:39 عصر
ممکنه Trojan رو بگزارند توی نرم افزار فتوشاپ که مثلاً اپلود میکنند .
نرم افزار همه چیزش درسته و حجمش 500 مگ هست .اما یه فایل 1 کیلو بایتی تروجان هم با خودش داره !منظور شما را متوجه نشدم.

یک سوال
اصلا به عنوان مثال همین سایت "برنامه نویس" چطوری avatar هار را استریل می کنه؟



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


اما یه کاربر بیچاره که ممکنه فایل JPG رو دانلود کنه و در حقیقت موقع اجرا براش EXE اجرا میشه .
منظورتون را از سرور متوجه نشدم
ببیند احتمال دانلود کردن فایل jpg نیست. ولی توی browser های ملت می خواد نمایش داده بشه خوب

آیا اگر دوستی فایلی با پسوند jpg را آپلود کنه، می توانه نیت بد خود را نیز سوار بر آن نموده و اینجکت کنه؟




ممکنه Trojan رو بگزارند توی نرم افزار فتوشاپ که مثلاً اپلود میکنند .
نرم افزار همه چیزش درسته و حجمش 500 مگ هست .اما یه فایل 1 کیلو بایتی تروجان هم با خودش داره !
ببخشید. منظور شما اینه یعنی؟
برنامه فوتوشاپ از کومپانی و ریشه آلودست. بنابراین تمامی فایلهایی که خروجی تولید می کند هاوی توجان می باشد.
می شه بیشتر توضیح بدید؟


حقیفتش من می توانم داخل سرور (بعد از آپلود شدن) پسوند فایلم را چک کنم. اگر jpg بود آنرا save کنم. ولی سوال من اینکه از این بابت چند درصد امنیت من ارتقاع پیدا می کنه.؟

متشکرم

milade
چهارشنبه 09 شهریور 1390, 14:20 عصر
اصلا به عنوان مثال همین سایت "برنامه نویس" چطوری avatar هار را استریل می کنه؟

شما الان یه فایل ورد رو بردار فرمتش رو بکن .jpg و بده برنامه نویس به عنوان اواتار .
ببین چه واکنشی نشون میده ! هیچی !
چرا ؟
چون انالیزور که نیست که ...
اصلاً نشد هست .

واسه مین برخی میان یه سری بد افزار رو میچسبونن انتهای برنامه کاربردی ( اسم فتوشاب تنها یه مثال بود و من کاری به کمپانیش ندارم ) . خب برنامه داره کارش رو میکنه بد افزار هم کارش رو !

آیا اگر دوستی فایلی با پسوند jpg را آپلود کنه، می توانه نیت بد خود را نیز سوار بر آن نموده و اینجکت کنه؟

همون طور که مستحضر هستید سرور ها کد رو میفرستن به کاربر و سیستم کاربر وضیفه اجرا رو داره .
اگر یه ویروس با فرمت jpg اپ بشه سیستم کاربر اون ویروس رو اجرا میکنه و ممکنه هر بلایی سرش بیاد .راهی هم نیست . چون فایل ویروسی هست .
راه های متعددی هم وجود داره .
مثلاً یاهو اومده اول ویروسیابی میکنه .
عکس رو نشون نمیده مگر شما Show Pic بزنید .
وقتی میخواید دانلود کنید بازم ویروسیابی میکنه ...