PDA

View Full Version : چند سوال در مورد مقابله با حملات xss



neda555
شنبه 09 اردیبهشت 1391, 22:05 عصر
سلام وقت بخیر
من یک سری از مطالب این سایت را در مورد امنیت مطالعه کردم
کمی گیج شدم و چند تا سوال دارم:
1.تا زمانی کهValidateRequest="false" نکردیم آیا باز هم خطر حمله XSS وجود داره؟
2.من متوجه نمیشم مثلا وارد کردن * و + و @ و & چه خطری داره؟اگر ممکنه با یک مثال توضیح بدهید
3.این کدی که در زیر گذاشتم میتونه امنیت را تضمین کنه؟
string Query = Regex.Replace(context.Request.QueryString["query"], @"[\[\]\\\^\$\|\?\*\+\(\)\{\}%,;><!@#&\+\'\""/]", "", RegexOptions.Compiled);



لطفا راهنمایی کنید و تشکر

saeed31641
شنبه 09 اردیبهشت 1391, 22:38 عصر
دوست عزیز تو اینترنت یه خورد وقت بزاری اینقدر مطالب زیاد هست که احتیاج تاپیک زدن نباشه.فقط اینو بدون با یه کد نمی تونی امنیت برقرار کنی روش های حمله مختلفی دارن که سرچ بزنی پیدا میکنی

neda555
شنبه 09 اردیبهشت 1391, 22:56 عصر
دوست عزیز تو اینترنت یه خورد وقت بزاری اینقدر مطالب زیاد هست که احتیاج تاپیک زدن نباشه.فقط اینو بدون با یه کد نمی تونی امنیت برقرار کنی روش های حمله مختلفی دارن که سرچ بزنی پیدا میکنی
کاربر محترم من جستجو کردم چندین راه حل هم پیدا کردم که همگی از یک جا کپی و پسیت شده بود!و سوالاتی که پرسیدم نتیجه جستجو بنده هست
اگر می دونید لطفا پاسخ بدید

dorparasti
یک شنبه 10 اردیبهشت 1391, 00:35 صبح
استفاده از validateRequest تا حد زیادی می تونه مانع از ارسال داده های مشکوک بشه اما در همین مورد در وب خوندم که روش هایی برای دور زدن این گزینه وجود داره ( مطمئن نیستم البته ) .
در مورد این کاراکترها نمی دونم اما بعضی کاراکترها در زبان اسکریپت نویسی مثل چاوا اسکریپت یا مثلا اس کیو ال دارای یک معنی خاصی هستند مثل تبدیل متن به کامنت یا پایان خط یا دستور و ... . خوب وقتی یک کاربر بتونه ( و این فرصت بهش داده بشه ) که به جای یک داده موردنظر برنامه بیاد و از اون کاراکتر ها استفاده کنه می تونه باعث اشکال در برنامه و دیتابیس شما بشه . ( کاراکتر هایی مثل ' یا -- در اس کیو ال مثلا )

و در مورد مقابله با XSS می تونید به این مطلب مفید (http://www.dotnettips.info/2011/05/xss.html) مراجعه کنید .

neda555
یک شنبه 10 اردیبهشت 1391, 01:03 صبح
در مورد به کار گیری تگ <> به این دلیل هست که میشه یه دستور جاوا اسکریپ یا ...را باهاش وارد کرد واسه همین باید جلوی وارد کردنش گرفته بشه این درست
در مورد ' یا -- یا 1=1 هم حق با شماست اینها میتونه در مواردی معنی خاص داشته باشه ولی مثلا کاراکتر @ را برای وارد کردن ایمیل بهش نیاز داریم و اینکه از یه دستور کلی استفاده کنیم تا همه ای کاراکترها
را حذف کنه مشکل پیش میاد

Alghoochi
یک شنبه 10 اردیبهشت 1391, 15:39 عصر
در مورد به کار گیری تگ <> به این دلیل هست که میشه یه دستور جاوا اسکریپ یا ...را باهاش وارد کرد واسه همین باید جلوی وارد کردنش گرفته بشه این درست
در مورد ' یا -- یا 1=1 هم حق با شماست اینها میتونه در مواردی معنی خاص داشته باشه ولی مثلا کاراکتر @ را برای وارد کردن ایمیل بهش نیاز داریم و اینکه از یه دستور کلی استفاده کنیم تا همه ای کاراکترها
را حذف کنه مشکل پیش میاد

حذف کاراکتر‌های ورودی کار درستی نیست. می‌تونید به جای <> از &lt; و &gy; استفاده کنید که معادل هستند.

S.ahmad.mirzai
جمعه 18 مرداد 1392, 21:35 عصر
این پست رو هم یه نگاهی بندازین
http://www.safecode.ir/Post.aspx?id=2 (http://http://www.safecode.ir/Post.aspx?id=2)

General-Xenon
جمعه 18 مرداد 1392, 22:47 عصر
سلام وقت بخیر
من یک سری از مطالب این سایت را در مورد امنیت مطالعه کردم
کمی گیج شدم و چند تا سوال دارم:
1.تا زمانی کهValidateRequest="false" نکردیم آیا باز هم خطر حمله XSS وجود داره؟
2.من متوجه نمیشم مثلا وارد کردن * و + و @ و & چه خطری داره؟اگر ممکنه با یک مثال توضیح بدهید
3.این کدی که در زیر گذاشتم میتونه امنیت را تضمین کنه؟
string Query = Regex.Replace(context.Request.QueryString["query"], @"[\[\]\\\^\$\|\?\*\+\(\)\{\}%,;><!@#&\+\'\""/]", "", RegexOptions.Compiled);



لطفا راهنمایی کنید و تشکر

سلام به همه .. برای جلو گیری از حملات XSS کافی نیست . در بخش Query String کافیه مقادیر رو چک کنید
متد هایی که از Query راه پیدا خواهند کرد کافیه بررسی کنید و بصورت مستقیم در کد نویسی قرار ندین
مثلا نباید یک مقدار از Query String رو مستقیما با کد های HTML صفحاتتون ترکیب کنید...

ValidateRequest برای جلوگیری از حملات Injection به کار میره .. مثلا شما اگر داخل 1 تکست باکس کد HTML مثال (<Script>) بنویسید و سمت سرور بفرستید ... سرور به شما اجازه نخواهد داد که ادامه کار به روال خودش پیگیری بشه مگر اینکه این خاصیت رو False کنید تا ValidateRequest انجام نشه... یا برای مثال نباید مقدار یک Textbox رو مستقیما داخل یک Command برای برقراری ارتباط با بانک قرار بدین....
در رابطه با کاراکتر هایی که گفتین معمولا اینجور Injection ها کاراکتر هایی هستند که هنگام دریافت از کاربر جلوشون گرفته میشه کاراکتر هایی مثل * ' " - + ; @ # رو باید جلوشونو بگیرین....
بصورت کلی و بیان ساده :
XSS = استفاده از کد های script
Injection = استفاده از حفره هایی برای ارتباط با Database مثل Querystring و یا . ...
LFi , EFi ,... در کل ربطی به تاپیک و ValidateRequest نداره ...

برای تبدیل مقادیر یک راه هست که زمانی ValidateRequest رو False کردین . از این طریق که خیلی سادست بتونین جلوی حملات رو بگیرین البته چون عنوان XSS هست . کد مربوط به این نوع متد هست...

string _data = Server.HtmlEncode(Request.QueryString["a"].ToString());
string _data = Server.HtmlEncode(Textbox1.Text);

string _res = Server.HtmlDecode(_data);