PDA

View Full Version : سوال: مقابله با حملات xss



mohsen.nsb44
سه شنبه 15 فروردین 1391, 13:42 عصر
سلام خدمت همه دوستان
همانطور که میدونید زمانی که از ادیتور در صفحه استفاده میکنیم باید خاصیت validationRequest رو برابر false قرار دهیم و این امر شرایط را برای حملات xss محیا میکند حال برای زمانی که از ادیتور استفاده میکنیم
چکار باید کرد تا از حملات xss مصون ماند؟
یکی از دوستان استفاده از AntiXss رو پیشنهاد کرد
لطفا اگه کسی پیشنهادی داره راهنمایی کنه
اگه مثالی هم جهت درک بهتر مطلب گذاشته بشه ممنون میشم

crazy_1892
سه شنبه 15 فروردین 1391, 15:14 عصر
.NET Tips: مقابله با XSS ؛ يكبار براي هميشه! (http://www.dotnettips.info/2011/05/xss.html)

mohsen.nsb44
سه شنبه 15 فروردین 1391, 17:08 عصر
.NET Tips: مقابله با XSS ؛ يكبار براي هميشه! (http://www.dotnettips.info/2011/05/xss.html)
دوست عزیز کلاسشو به برنامه اضافه کردم ارور زیر رو میده
Error 1 The type or namespace name 'Security' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
مشکل از using Microsoft.Security.Application; هستشگزینه ای به نام security بعد از وارد کردن نقطه microsoft وجود نداره
من از دات نت 3.5 استفاده مسکنم

mohsen.nsb44
سه شنبه 15 فروردین 1391, 19:05 عصر
ایا باید dll ی اضافه کرد؟
لطفا راهنمایی بکنید

dorparasti
سه شنبه 15 فروردین 1391, 19:51 عصر
بله . AntiXSS.net یک کتابخانه است که باید به پروژه اضافه کنید ( در قالب dll ) تا امکان استفاده رو داشته باشید .

+ لینک دانلود (http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=28589)

mohsen.nsb44
سه شنبه 15 فروردین 1391, 20:17 عصر
دوست عزیز برنامشو از لینکی که دادین دانلود کردم حالا اسم dll اون چیه که اضافش کنم تو تب .net framework components قرار داره یا ... ؟

dorparasti
سه شنبه 15 فروردین 1391, 20:46 عصر
فایلی که دانلود کردید باید یک فایل msi باشه که باید اجراش کنید . بعد در پوشه program files یک پوشه به نام Microsoft Information Security اضافه میشه توی این پوشه ، یک پوشه به نام library هست که یک dll به نام AntiXSSLibrary درش هست که باید به پوشه bin پروژه اضافه کنید . بعد از طریق فضا نام Microsoft.Security.Application و کلاس AntiXSS به توابع موجود دسترسی خواهید داشت

mohsen.nsb44
سه شنبه 15 فروردین 1391, 21:08 عصر
دوست عزیز خط زیر رو ارور میده
f (string.IsNullOrWhiteSpace(collection[i])) continue;
بعد از نقطه گزینه ای به نام IsNullOrWhiteSpace نداریم
خط زیر هم مشکل میگیره
collection[collection.Keys[i]] = Sanitizer.GetSafeHtml(collection[i]);
گزینه Sanitizer رو مشکل میگیره

dorparasti
سه شنبه 15 فروردین 1391, 21:35 عصر
متوجه نشدم !؟ کدهایی که نوشتید ارتباطی با antiXSS نداره !

dorparasti
سه شنبه 15 فروردین 1391, 21:38 عصر
بعد از اضافه کردن dll به پروژه . در صفحه ای که می خواید ازش استفاده کنید به ترتیب زیر عمل می کنید :

اول namespace رو وارد می کنید


using Microsoft.Security.Application;


بعد مثلاً می خواید یک متن رو از دیتابیس توی صفحه بطور امن نمایش بدید


Label1.Text = AntiXss.GetSafeHtml(TextFromDB);

mohsen.nsb44
سه شنبه 15 فروردین 1391, 21:58 عصر
متوجه نشدم !؟ کدهایی که نوشتید ارتباطی با antiXSS نداره !
لینکی که معرفی کردین شامل کد هایی بود که داخل کلاس AntiXssModule بود منم همون کد ها رو تو کلاس هم نام تو پروژم کپی کردم اما چیزایی رو که بهش اشاره کردم ارور میگرفت

mohsen.nsb44
سه شنبه 15 فروردین 1391, 22:01 عصر
بعد از اضافه کردن dll به پروژه . در صفحه ای که می خواید ازش استفاده کنید به ترتیب زیر عمل می کنید :

اول namespace رو وارد می کنید


using Microsoft.Security.Application;


بعد مثلاً می خواید یک متن رو از دیتابیس توی صفحه بطور امن نمایش بدید


Label1.Text = AntiXss.GetSafeHtml(TextFromDB);

پس اون کلاس واسه چیه؟ یعنی نمیخواد از اون کلاس استفاده بکنم؟

fakhravari
سه شنبه 15 فروردین 1391, 22:19 عصر
سلام اقای زائری.
یه سمپل بزارید ممنون میشم.
چنتا مثال بزاری :بوس:
ثبت و خواندن داده ها از دیتابیس

dorparasti
سه شنبه 15 فروردین 1391, 22:20 عصر
آها .. ( اون لینک رو من نداده بودم البته :) ) .. استاد نصیری اومدن از کلاس antiXSS در قالب یک httpModule استفاده کردن تا بصورت متمرکز تمام درخواست ها و مقادیر پاکسازی بشن . من از اون کد استفاده نکردم و نمی دونم چطوریه . IsNullOrWhiteSpace در نسخه 4.0 ارائه شده پس اگر از ورژن های پایین تر استفاده می کنید خطا می گیره و باید از همون IsNullOrEmpty استفاده کنید . santizier هم متعلق به نسخه های قبلی antiXSS بوده و الان از طریق همون AntiXSS.GetSafeHtml استفاده میشه . این دو رو باید اصلاح کنید .

mohsen.nsb44
چهارشنبه 16 فروردین 1391, 10:42 صبح
آها .. ( اون لینک رو من نداده بودم البته :) ) .. استاد نصیری اومدن از کلاس antiXSS در قالب یک httpModule استفاده کردن تا بصورت متمرکز تمام درخواست ها و مقادیر پاکسازی بشن . من از اون کد استفاده نکردم و نمی دونم چطوریه . IsNullOrWhiteSpace در نسخه 4.0 ارائه شده پس اگر از ورژن های پایین تر استفاده می کنید خطا می گیره و باید از همون IsNullOrEmpty استفاده کنید . santizier هم متعلق به نسخه های قبلی antiXSS بوده و الان از طریق همون AntiXSS.GetSafeHtml استفاده میشه . این دو رو باید اصلاح کنید .
میشه زحمت بکشین و مثالی بزارین البته اگه لطف کنین برای دات نت 3.5 بزارین ممنون میشم نسخه 2008

mohsen.nsb44
چهارشنبه 16 فروردین 1391, 11:32 صبح
دوست عزیز گفتید برای اینکه متنی که از دیتابیس میخونم اگه به طور امن بخام نشون بدم از کد زیر باید استفاده کنم


Label1.Text = AntiXss.GetSafeHtml(TextFromDB);

حال در موقع ثبت اطلاعات چطور باید به صورت امن ثبت کرد؟

dorparasti
چهارشنبه 16 فروردین 1391, 13:03 عصر
این مشکلی بود که من هم با اون روبرو بودم .
اول باید مشخص کنیم که یک داده خطرناک در کجا می تونه موثر باشه . 2 تا از معمولترین ها کدهای اسکریپت و query های دستکاری شده sql هستند . اولی در خروجی سایت موقع رندر محتویات ( صفحه مرورگر .... ) ایجاد مشکل می کنه و دومی در دیتابیس موقع اجرای query .
حالا باید نحوه امن کردن پردازش ها رو تعیین کنیم .
برای امن کردن پردازش در برابر sql injection از parameter های strongType استفاده می کنیم تا هیچ query غیرعادی اجرا نشه ( با دور زدن منطق برنامه ) .
برای مقابله با XSS در موقع ذخیره داده ها در دیتابیس مشکلی نداریم چون در اونجا این کدهای جاوا اسکریپت اجرا نمیشن بلکه مثل هر متن دیگری ذخیره میشن . بلکه مشکل در موقع واکشی اطلاعات و نمایشش بر روی صفحه است . نتیجه این که در موقع ذخیره متن تون لزومی به امن کردن نیست ( هرچند این یک مسئله صد در صد نیست و شاید بد هم نباشه که همون اول کدهای مخرب رو پاک کنید . بستگی به خودتون و طرح پروژه تون داره ) بلکه باید موقع گرفتن داده ها از دیتابیس و نمایش بر روی صفحه ( من اینکارو در لایه BLL انجام میدم ) اینکارو انجام داد .

امیدوارم منظورم رو رسونده باشم

mohsen.nsb44
چهارشنبه 16 فروردین 1391, 13:34 عصر
چه کاریه دوست عزیز موقع ثبت اطلاعات که امن کنیم بهتر نیست؟
فکر کنید یک موضوع رو در چندین بخش به نمایش خواهید گذاشت برای هر بخش باید موقع خواندن کد نوشت اما اگه موقع ثبت ایمن کنیم فقط با یکبار امن کردن مشکل حل میشود
کسی از دوستان میدونه چطور باید موقع ثبت اطلاعات اونو امن کرد تا کد های اضافی و خطرناک تزریقی پاک بشه؟

kingmech
چهارشنبه 16 فروردین 1391, 13:54 عصر
مگر غیر اینکه xss برای برای ضربه زدن به کاربر هست

مطمنن برای نوشته یه کد برای اسیب زدن به کاربر مثلا فشینگ به بیشتر از 100-200 کاراکتر نیاز هست به نظرتون اگه جلوی نامه نگار ( داشتن فیلد های با طول آزاد نامشخص ) رو بگیریم به نظرتون مشکل حل نمیشه

dorparasti
چهارشنبه 16 فروردین 1391, 14:21 عصر
فکر کنید یک موضوع رو در چندین بخش به نمایش خواهید گذاشت برای هر بخش باید موقع خواندن کد نوشت اما اگه موقع ثبت ایمن کنیم فقط با یکبار امن کردن مشکل حل میشود

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



به نظرتون اگه جلوی نامه نگار ( داشتن فیلد های با طول آزاد نامشخص ) رو بگیریم به نظرتون مشکل حل نمیشه


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

mohsen.nsb44
چهارشنبه 16 فروردین 1391, 14:41 عصر
البته اگر قرار باشه در هر صفحه بیایید و اطلاعات رو مستقیماً از دیتابیس بخونید و نمایش بدید بله . نمیشه .
اما این روش مناسبی نیست . در صورتی که کدهاتون رو به صورت متمرکز و لایه بندی شده تعریف کرده باشید تنها یک بار کد واکشی اطلاعات رو می نویسید و در همه جای برنامه از همون کد استفاده می کنید . چیزی که برنامه نویسی چند لایه بهش می گن .
.
دوست عزیز من از استورپروسیجر ها استفاده میکنم اون حرف فقط یک مثال بود برای رساندن منظورم
متوجه نشدین چطور میشه موقع ثبت اطلاعات امن کرد ؟