ابن سوريا
يا حيف .. أخ ويا حيف
المشاركات: 8,151
الانضمام: Dec 2001
|
شرح موضوع الرهان .. أدناه
في الموضوع أدناه في هذه الساحة,و للدعابة فلقد فتحته لتجريب همتكم و للتحريك قليلاً. فكان من المفاجئ و الجميل أن الكثيرين قبلوا الرهان و التحدي و تمكنوا من الدخول للموضوع.
بالتأكيد فإن الكثير منكم تفاجأ بعملية إغلاق الصفحة بكاملها لمجرد دخولكم للموضوع. و ربما تفاجأ البعض أكثر عندما علم أن الكود الذي وضعته و جعل الصفحة "تسكر بوجهكم" بسيط جداً, عبارة عن سطر بسيط واحد مؤلف من عمليتين في لغة الجافا سكريبت.
لذا علي أن أشرح :
أولاً فلماذا الأمر مفاجئ؟
لأنه من المفروض أن أي كود "أنترنتي" لا يستطيع التحكم بمتصفحك(كما تحدده متطلبات الحماية),فهو نوع من التحكم بمتصفحك دون أن تصلبه أنت.
و لو جربت مثلاً أن تكتب التعليمة (بلغة جافا سكريبت التالية:
<script>
self.close()
</script>
فسترى أن المتصفح سيقول لك: بأن الصفحة تحاول أن تغلق فهل تريد السماح لها بذلك, أو بالأحرى أن هناك "كوداً" يحاول إغلاق متفحك فهل أنت موافق؟
ثانياً: شرح المشكلة, و الثغرة بالأحرى.
الثغرة هي : ثغرة بالمتصفح IE(Internet Explorer) و ليست باللغة (JavaScript) , فبتعليمة بسيطة استطعنا اختراق الحماية الموجودة فيها .
ما هو مبدأ عمل المتصفح؟
المتصفح و عندما يطلب منه كود ما إغلاق نافذة ما, فإنه يبحث عن أصل هذه النافذة التي نريد إغلاقها. فمن المسموح إغلاق النوافذ الثانوية (البوب أب) بما أنها ناتجة أصلاً عن كود بالصفحة الرئيسية, و لكنه نظرياً لا يسمح بإغلاق النافذة الرئيسية, و التي تم فتحها من المستخدم ذاته.
لهذا الغرض يقوم المتصفح بتحقق بسيط و تكمن به الثغرة, فالمتصفح (أو برنامج IE) يبحث عن وجود لصفحة أم للصفحة التي يريد الكود إغلاقها. فإن وجد أن لها صفحة أم فيقوم بإغلاقها , أما إذا لم يكن لها أي صفحة أم (أو جذر) فسيعتبر أنها صفحة رئيسية و يطلب بهذه الحالة موافقة المتصفح. هذا ما يسمى مبدأ الصفحات اليتيمة أيضاً.
ما لم يحسب له المبرمج (للمتصفح IE) أي حساب, هو العملية البسيطة و التعليمة التي تبدو غير ذات أهمية بالكود الذي رآه البعض:
<script>
opener = self
self.close()
</script>
و التعليمة ذات الأهمية هي :
opener = self;
و هذه التعليمة تعني ببعض التبسيط : أنك أيتها الصفحة الحالية لك صفحة أم (جذر) و هي أنت نفسك.
و بهذا خدعنا المتصفح , أخبرناه أن له صفحة أم و هو نفسه الأم. (self تعني النفس أو الذاتي أي الصفحة الحالية و opener تعني الصفحة الأم) , و تقنياً هذا يعني affectation entre objets
و بعدها فإن إغلاق الصفحة أصبح سهلاً, فإننا نطلب من الصفحة الحالية إغلاق نفسها, فيقوم المتصفح بالبحث عن opener أي صفحة أم, فيجد أن هناك صفحة أم فعلاً, فيقوم بإغلاق الصفحة بدون أي سؤال, الثغرة هي أن المبرمج للمتصفح نسي أن يتحقق من أن الصفحة الأم ليست هي نفسها الصفحة الحالية..
طبعاً لدخول الموضوع , فيكفي أن تذهب لإعدادات المتصفح(security) و تجعل من تنفيذ كود الجافا سكريبت إختيارياً, ثم ترفض تنفيذ الكود. فتفتح لك الصفحة.
هناك حلول ٌ أخرى طبعاً..
و لكن المهم هو فهم الثغرة..
لا أهمية فعلية لهذه الثغرة , و كانت لمجرد المداعبة فقط.
هناك ثغرات أخرى تعتمد على ال DHTML و ال ActiveX Object أكثر أهمية و خطورة تمكنكم حتى من الكتابة بجهاز المتصفح, لكن تم تفاديها جزئياً منذ IE5.5 أو الباتشات للحماية ل IE5
تحياتي الخالصة.
ابن سوريا.
|
|
10-16-2003, 10:59 PM |
|
{myadvertisements[zone_3]}
{myadvertisements[zone_3]}
{myadvertisements[zone_3]}
{myadvertisements[zone_3]}
{myadvertisements[zone_3]}
{myadvertisements[zone_3]}
{myadvertisements[zone_3]}