الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل موقعك يقف في وجه ال Xss ؟

بدأه Robatic في 13 يناير 2010 · 7 رد · 1,018 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اليوم راح نتعرف على ثغرة في المواقع قد يغفل الكثيرون عنها وهي XSS، وهو إختصار لـ Cross Site Scripting

الـ XSS يستهدف المواقع التي يتم فيها المشاركة التفاعلية مثلها مثل المنتديات والمدونات وكل موقع يسمح بأخذ مدخلات من المستخدمين

لنفرض أنه لدينا مدونه وفي آخر المدونه يمكنك كتابة تعليق، ولنفرض أن المدونه تأخذ ما يكتبه المستخدم وتعرض في الصفحة كما هو، هنا تكمن الخطورة أو الثغره إن صح التعبير

لنفرض أن مستخدم معين كتب تعليق ولكن تعليقه كان بالشكل التالي :

<script type="text/javascript">
	alert("Let's see how secure this blog is!");
</script>

نلاحظ أن ما كتبه المستخدم هو عباره عن كود javascript يقوم بإظهار رسالة لكل من يدخل هذه المدونه، ماذا لو كان المستخدم قد كتب التالي :

<script type="text/javascript">
	document.location.href = "http://www.a-very-bad-full-of-trojans-and-back-doors-website.com"
</script>

هنا ستكون مصيبة لكل شخص يحاول عرض المدونه حيث سيقوم الكود المدخل من المستخدم أعلاه بإعادة توجيه أي شخص يعرض المدونه إلى موقع ضار. السؤال كيف تحمي موقعك وزواره من هذا الهجوم أو الثغرة ؟

بشكل إفتراضي ASP.NET 2.X تقوم بشيء يسمى ValidationRequest وهذه ميزة تمكن الـ Web Application بدراسة ما تم إدخاله من قبل المستخدم بحيث لو كان على هيئة كود سيتم إصدار Exception فورا كما هو موضح في الصورة ادناه

post-91978-12633837214144_thumb.jpg

يمكنكم إبطال هذه الميزة عن طريق تغيير قيمة ValidationRequest في الـ Page Directive لصفحة الـ aspx الخاصة بكم كما هو موضه في الكود التالي:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" ValidateRequest="false"  %>

مذا إذا لم تكون محظوظا ولم تتوفر لديك بيئة عمل تحت .NET Framework 2.0 أو كنت تبرمج بلغة PHP أو JSP أو فقط لمجرد عدم إرتياحك لشكل الصفحة التي تتولد عندما يقوم المستخدم بالقيام بما ذكر أعلاه ؟ كيف تحمي نفسك من الـ XSS ؟

الجواب هو عن طريق معادلة أو Normalization لما تم إدخاله من قبل المستخدم، مثلا أفرض أنك تريد كتابة علامة أصغر من (>) في موقك وانت تعلم أن هذا الرمز خاص لإبتداء Tag في الـ HTML، سوف تقوم بوضع الرمز الخاص

<

كذلك تقوم بتغيير كل رمز خاص من مدخلات المستخدم بحيث لا يؤدي في النهاية إلى كارثة. بالنسبة للـ ASP.NET 2.X هناك دالة اسمها Server.HtmlDecode تقوم بذلك كما هو موضح في المثال التالي :

string safeEntry = Server.HtmlDecode("<script type='text/javascript'>
	document.location.href = 'http://www.a-very-bad-full-of-trojans-and-back-doors-website.com'
</script>");

ولتوضيح المسألة أكثر يوجد في المرفقات Solution به صفحة يتم عن طريقها إدخال مواضيع بطريقتين واحدة بالطريقة الآمنة والثانية بالطريقة التي قد تؤدي إلى كارثة والغرض منها فقط لمشاهدة ما قد يحدث.

أتمنى أن يكون الموضوع مفيد وواضح ودمتم في رعاية الله

2
#2

أشكرك أخي جزيل الشكر

شرح واضح وممتاز

بس فين المرفقات؟؟مافيش غير الصورة

#3

السلام عليكم ورحمة الله وبركاته

أنا آسف جدا لعدم إرفاقي للـ Solution

وه الآن مرفق في هذا الرد

وانا أشكرك يا أخي الفاضل albaheth4 بعنف

ThreatsShouldBeAwareOf.zip

تم تعديل هذه المشاركة بواسطة Robatic في 14 يناير 2010 في 22:26

#4

شكرا اخي

#5

شكرا أخي

العفو

#6

شكرا Robatic

مراعاة هذه الجوانب اصبح من الضروريات وأي مطور ويب عليه ان ينقح اي كود يدخله

عندما قمت بتعطيل ValidationRequest وانصب تركيزك على على Thread Body بغرض توضيح المشكلة , ظهرت نفس المشكلة التي تنبه لها في Thread Title , اريد فقط ان اوضح ان الأمر يحتاج تركيز كبير انت هنا تريد ان لا تشتت القاريء وتذهب بالمثال اكثر , ولكني رأيت كثير من المطورين يطبقون بعض المعايير ولا يفحصون كل شئ , نفس الأمر ينطبق على الباراميتر الممرر لـ showthread.aspx فهو يحتاج تنقيح المدخل , بعض المبرمجين يقوم بالخطوة الأولى وهي التحقق من وجود البارميتر كما في المثال وبعضهم يقوم بالخطوة التالية وهي التحقق من DataType وبعضهم يذهب أكثر ويتحقق من سعة الباراميتر , فمثلا في الصفحة المذكورة قد تمرر showthread.aspx?id=2 دون حدوث خطأ ولكن جرب تمرير showthread.aspx?id=12345678910 سيحدث خطأ

The World Must Be Crazy

#7

السلا عليكم

موضوع جميل , في بعض الحيان تريد عرض المدخلات كما هي (HTML codes) ولكن هذه المدخلات ممكن ان تحتوي على اكواد خطرة مثل جافا سكربت او فريم او فلاش ....

فيجب اولا تنقيح الكود منها ثم عرضه

مثال بسيط لتوضيح: فقط يزيل السكربت و الفريم يجب اضافة فلاتر اخرى

public string FiletHtmlCode(string lpText)
    {
        //Script Tag
        lpText = Regex.Replace(lpText, "<script", "<xscript", RegexOptions.Multiline | RegexOptions.IgnoreCase);
        lpText = Regex.Replace(lpText, "</script", "</xscript", RegexOptions.Multiline | RegexOptions.IgnoreCase);
        //IFrame Tag
        lpText = Regex.Replace(lpText, "<iframe", "<xiframe", RegexOptions.Multiline | RegexOptions.IgnoreCase);
        lpText = Regex.Replace(lpText, "</iframe", "</iframe", RegexOptions.Multiline | RegexOptions.IgnoreCase);
        //*******************************************************************
        //you can check for the Objects also like flash or applets or whatever
        //*******************************************************************
        MatchEvaluator mEvaluator = new MatchEvaluator(CheckTags);
        lpText = Regex.Replace(lpText, "<([a-z]){1,}([^>]*)>", mEvaluator, RegexOptions.Multiline | RegexOptions.IgnoreCase);
        return lpText;
    }
    public string CheckTags(Match m)
    {
        string retText = m.Value;
        retText = Regex.Replace(retText, "\\s(on[a-z]{1,}\\s{0,}([^=]*)=)", " xxxxon=", RegexOptions.Multiline | RegexOptions.IgnoreCase);
        retText = Regex.Replace(retText, "\"(on[a-z]{1,}\\s{0,}([^=]*)=)", "\"xxxxon=", RegexOptions.Multiline | RegexOptions.IgnoreCase);
        retText = Regex.Replace(retText, "'(on[a-z]{1,}\\s{0,}([^=]*)=)", " \'xxxxon=", RegexOptions.Multiline | RegexOptions.IgnoreCase);
        retText = Regex.Replace(retText, "([\\s|\\\"|'|=])javascript:", "$1removedscript:", RegexOptions.Multiline | RegexOptions.IgnoreCase);
        return retText;
    }

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 17 يناير 2010 في 21:30

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#8

السلام عليكم ...

شكرا اخى وبارك الله فيك ..شرح مبسط وواضح

مزيدا م ن التقدم

مواضيع مشابهة