اذهب إلى المحتوى

السؤال

Recommended Posts

  • 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 من هنا.

 

بالتوفيق

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...