_Mehdi نشر 14 فبراير 2016 أرسل تقرير نشر 14 فبراير 2016 السلام عليكم كيف يمكن ان امنع ثغرة الٌcross site scripting من النوع Reflectedxss علما ان هذه الثغرة تحدث في Query String للموقعي بلغة السي شارب؟ اقتباس
1 Lujain Maaz نشر 14 فبراير 2016 أرسل تقرير نشر 14 فبراير 2016 توجد عدّة خطوات لمنع 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 _Mehdi نشر 14 فبراير 2016 الكاتب أرسل تقرير نشر 14 فبراير 2016 الخطوة الثانية هل المقصود يعني مثلا طباعة اوماشابه ومالمقصود من (الروابط url إلى العميل.) ارجوالتوضيح شكرالك على المساعدة اقتباس
السؤال
_Mehdi
السلام عليكم
كيف يمكن ان امنع ثغرة الٌcross site scripting من النوع Reflectedxss علما ان هذه الثغرة تحدث في Query String للموقعي بلغة السي شارب؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.