• 0

منع ثغرة ال(Reflected xss(nonNon-Persistent ؟

السلام عليكم

كيف يمكن ان امنع ثغرة الٌcross site scripting  من النوع Reflectedxss علما ان هذه الثغرة تحدث  في Query String للموقعي بلغة السي شارب؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

توجد عدّة خطوات لمنع cross-site scripting(XSS) في ASP.Net. يجب أولًا أن تتأكد من تفعيل التحقّق من صحة الطلبات request validation. -افتراضيًا- تكون  request validation مفعّلة في ملف Machine.config ولا يقوم التطبيق بعمل overriding لهذه الإعدادات في ملف Web.config لذا تأكد من تعيين الخاصيّة Validate Request إلى القيمة True كما في المثال التالي:

<system.web>
  <pages buffer="true" validateRequest="true" />
</system.web>

ولاختبار أن التحقّق من صحة الطلبات (request validation) مفعّل أنشئ صفحة ASP.NET تقوم بتعطيل التحقّق من صحة الطلبات عن طريق تعيين  ValidateRequest="false" كما في الشيفرة التالية:

<%@ Page Language="C#" ValidateRequest="false" %>
<html>
 <script runat="server">
  void btnSubmit_Click(Object sender, EventArgs e)
  {
    // If ValidateRequest is false, then 'hello' is displayed
    // If ValidateRequest is true, then ASP.NET returns an exception
    Response.Write(txtString.Text);
  }
 </script>
 <body>
  <form id="form1" runat="server">
    <asp:TextBox id="txtString" runat="server" 
                 Text="<script>alert('hello');</script>" />
    <asp:Button id="btnSubmit" runat="server"   
                OnClick="btnSubmit_Click" 
                Text="Submit" />
  </form>
 </body>
</html>

عند تشغيل الصفحة ستظهر لك كلمة Hello في مربع الرسائل وذلك لأن السكربت الموجود في الـText Box قد صُيّر على أنه سكربت من جانب العميل client-side script في المتصفح الخاص بك.

الآن عيّن الخاصيّة ValidateRequest="true" أو قم بإزالتها واستعرض الصفحة مجدّدًا. سيتم عرض رسالة الخطأ التالية:

اقتباس

A potentially dangerous Request.Form value was detected from the client (txtString="<script>alert('hello...").

الخطوة الثانية راجع شيفرات ASP.Net التي توّلد خرج HTML وذلك لتحديد المواقع التي يتم فيها إرجاع خرج html والروابط url إلى العميل.

Response.Write
<% =

الخطوة الثالثة تحديد فيما إذا كان ناتج html يحوي على معلومات إدخال inputs وذلك بتحليل تصميم الصفحة والشيفرات البرمجية لتحديد إن كان هنالك أي معاملات إدخال من ناتج html.

فيما يلي قائمة تتضمن مصادر الإدخال الأكثر شيوعًا:

Query strings كما في المثال التالي:

Response.Write(Request.QueryString["username"]);

Form fields:

Response.Write(name.Text);
Response.Write(Request.Form["name"]);
Query Strings
Response.Write(Request.QueryString["name"]);

Databases and data access methods:

SqlDataReader reader = cmd.ExecuteReader();
Response.Write(reader.GetString(1));

Cookie collection:

Response.Write(
Request.Cookies["name"].Values["name"]);

Session and application variables:

Response.Write(Session["name"]);
Response.Write(Application["name"]);

بالإضافة إلى ذلك يمكنك عمل اختبار بسيط بكتابة نص مثل  "XYZ" في الحقول واختبار الناتج أو الخرج فإذا أظهر المتصفح النص "XYZ" أو شاهدت النص في مصدر الصفحة View Source فهذا يعني أن تطبيق الويب الخاص بك عُرضة لـ cross-site scripting.

جرّب أيضًا عمل inject لسكربت <script>alert('hello');</script> في أحد حقول الإدخال. قد لا تعمل هذه التقنية في جميع الحالات لأنها تعتمد على كيفيّة استخدام المدخلات لتوليد الخرج output.

يمكنك قراءة المزيد عن cross-site scripting من هنا.

 

بالتوفيق

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

الخطوة الثانية هل المقصود يعني مثلا طباعة اوماشابه ومالمقصود من (الروابط url إلى العميل.) ارجوالتوضيح 

شكرالك على المساعدة

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن