السلام عليكم ورحمة الله وبركاته
اليوم راح نتعرف على ثغرة في المواقع قد يغفل الكثيرون عنها وهي 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 فورا كما هو موضح في الصورة ادناه
يمكنكم إبطال هذه الميزة عن طريق تغيير قيمة 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 به صفحة يتم عن طريقها إدخال مواضيع بطريقتين واحدة بالطريقة الآمنة والثانية بالطريقة التي قد تؤدي إلى كارثة والغرض منها فقط لمشاهدة ما قد يحدث.
أتمنى أن يكون الموضوع مفيد وواضح ودمتم في رعاية الله