عام

احمي موقعك من تغرة XSS

احمي موقعك من تغرة XSS

رغم أن ثغرة XSS تعتبر ثغرة قديمة، إلا أنها قد شاعت في هذه الأيام XSS حتى أنها أصبحت كابوسا كبيرا لكثير من المواقع والبرمجيات الجاهزة كالمنتديات وما شابه، وهنا سأطرح الحلول المقترحة لهذه المشكلة في الدوت نت بإذن الله.
بداية، ما سأقوم بعرضه يكفي فقط للدوت نت الإصدار 1.1 وما بعده مثل الإصدار 2.0 وأما بخصو ص الإصدار 1.0 فتوجد حلول أخرى لحل هذه الثغرة وهو ما لن أهتم به لأن من يستخدم الإصدارات القديمة كان الواجب عليه أن يواكب التحديثات.
إن هذه المشكلة تظهر عند مناطق إرسال البيانات، فمثلا لدي صفحة بها صندوق نصي وأقوم عبرها بإرسال البيانات للخادم ، فقام شخص ما بكتابة الجملة التالية:

Code

<script>alert(‘some malicious code’);</script>

 

وهذا وسم جافا سكريبت يظهر رسالة، وليست الخطورة في هذا الوسم ولكنها تكمن في إمكانية إرسال وسوم أخرى عديدة شأنها تغيير عمل الصفحة بالكامل.
الحل يكمن في أن نقوم بمنع إرسال هذه الوسوم  للخادم ، وإذا كانت الصفحة تحتاج لإرسال قيمة بالرابط QueryString يجب فحصها في الصفحة التالية لها ( صفحة قراءة البيانات ).
لتلافي منع إرسال وسوم خطيرة إلى يتوجب عليك أن تقوم بتفعيل فحص المدخلات عبر الخاصية ValidateRequest=”true”  في الصفحة في أول سطر بها.

وهذه الخاصية جديدة في الإصدار 1.1 وما بعده وهدفها فحص مدخلات الصفحة المرسلة، فإذا وجد أن هنالك وسوم ممنوعة ، سوف يقوم الخادم برمي خطا من نوع HttpRequestValidationException وهو ما يمكنك أن تقوم بفحصه عبر الملف Global.asax في ححدث الخطأ ، وتقوم بإطهار رسالة أو صفحة خاصة له تخبره مثلا ، بأن هذا الأمر ممنوع ، أو عار عليه إذا رغبت بذلك .

أو أن تقوم بتفعيلها  في ملف الإعدادات Web.Config  في وسم الصفحة validateRequest=”true”، مع العلم أن هذا هو القيمة الإفتراضية لهذه الخاصية هي true ، بمعنى إن لم تكن قد غيرتها فلا تقوم بفعل شيء.

الأمر الآخر هو عند إرسالك لبيانات من صفحة إلى أخرى ، عليك أن تقوم بإستدعاء الدالة Server.HtmlEncode() عند الإرسال ، وعند استقبال البيانات عليك قراءتها عبر الدالة Server.HtmlDecode()، أو مثلا أن تستقبل البيانات من ويب سيرفس أو من قاعدة بيانات أخري، على سبيل المثال أنني مثلا أريد أن أرسل اسم المستخدم المكتوب في الصندوق النصي لصفحة أخرى كالتالي

Code

Response.Redirect(“login.aspx?username=” & Me.TextBox1.Text)

فإنه يتوجب إضافة الدالة بالشكل التالي

Code

Response.Redirect(“login.aspx?username=” & Server.HtmlEncode(Me.TextBox1.Text))

وعند قراءة البيانات في الصفحة الثانية أن تقرأ بالشكل التالي

Code

Dim uname As String = Server.HtmlDecode(Request.QueryString(“username”))

أما بخصوص الإصدار 1.0 فإنه توجد بعض الحلول الفعالة مثل استخدم Reqular Expression  في فحص المدخلات أو القيم المرسلة ، أو بطريقة بسيطة وغير دقيقة استبدال الوسوم بالقيم المشابهة لها من ال HTML

بالتوفيق للجميع

About the author

خليل سليم

Leave a Comment

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.