بعد ASP.NET 1.1 ، يتم تقديم القدرة على التحقق تلقائيًا ما إذا كان هناك XSS (هجوم برمجة نصية عبر المواقع) لتقديم النماذج. عندما يحاول المستخدم استخدام هذه الإدخال للتأثير على الصفحة لإرجاع النتيجة ، فإن محرك ASP.NET سيؤدي إلى قيام HTTPrequestValidationExceptionin. بشكل افتراضي ، سيتم إرجاع الصفحة ذات النص التالي:
هذه ميزة أمنية مهمة للغاية توفرها ASP.NET. نظرًا لأن العديد من المبرمجين ليس لديهم أي فكرة عن الأمن ، ولا يعرفون حتى وجود هجمات مثل XSS ، حتى عدد أقل من الناس يعرفون أن يأخذوا المبادرة لحمايتها. ASP.NET آمن افتراضيًا في هذه المرحلة. يتيح ذلك للمبرمجين الذين لا يعرفون الكثير عن الأمان أن يكتبوا مواقع الويب ذات قدرات حماية الأمان معينة.
ومع ذلك ، عندما أقوم بالبحث عن googled عن httprequestvalidationException أو طلب محتمل خطير . هذه الميزة ليست رعاية ما إذا كان موقع الويب الخاص بالمبرمج لا يحتاج إلى هذه الميزة. كنت خائفة جدا من البصر. يجب أن يكون الوعي الأمني دائمًا في ذهن كل مبرمج.
لماذا يرغب العديد من المبرمجين في حظر ValityTerequest؟ ليست هناك حاجة لقول هذا. جزء آخر ليس في الواقع أن المستخدم يسمح بإدخال الأحرف التي تسبب بسهولة XSS ، ولكنها تكره هذا النموذج من الإبلاغ عن الخطأ. ليس المستخدم.
بالنسبة للمبرمجين الذين يرغبون في التعامل مع رسالة الخطأ هذه بشكل جيد دون استخدام رسالة خطأ استثناء ASP.NET الافتراضية ، يرجى عدم تعطيل ValyAteRequest = false.
الطريقة الصحيحة هي إضافة وظيفة page_error () إلى صفحتك الحالية لالتقاط جميع الاستثناءات التي تحدث أثناء معالجة الصفحة دون معالجة. ثم أعط المستخدم رسالة خطأ قانوني. إذا لم يكن للصفحة الحالية page_error () ، فسيتم إرسال هذا الاستثناء إلى global.asax من application_error () للمعالجة ، ويمكنك أيضًا كتابة وظيفة معالجة أخطاء الاستثناء العامة هناك. إذا لم تتم كتابة وظيفة معالجة استثناء في كلا المكانين ، فسيتم عرض صفحة تقرير الخطأ الافتراضي هذه.
على سبيل المثال ، لا يتطلب الأمر سوى جزء قصير جدًا من التعليمات البرمجية للتعامل مع هذا الاستثناء. أضف هذا الرمز إلى صفحة الكود-بيهيند للصفحة:
| فيما يلي مقتطف مقتبس: protectedvoidpage_error (ObjectSender ، EventArgse) { استثناء = server.getlasterror () ؛ إذا (exishtprequestvalidationException) { Response.write (الرجاء إدخال سلسلة قانونية.) ؛ server.clearerror () ؛ // إذا كان clearerror () غير واضح () ، سيستمر تمرير هذا الاستثناء إلى application_error (). } } |
وبهذه الطريقة ، يمكن لهذا البرنامج اعتراض استثناء httprequestvalidationException ويمكنه إرجاع رسالة خطأ معقولة وفقًا لرغبات المبرمج.
هذا الرمز بسيط للغاية ، لذلك آمل أن لا يُسمح لجميع الأصدقاء الذين لا يُسمح لهم بإدخال أحرف مثل المستخدمين ، ولا يحظرون ميزة الأمان هذه. . يستطيع.
بالنسبة للمبرمجين الذين يحظرون هذه الميزة بشكل صريح ، يجب أن يفهموا ما يفعلونه ويجب عليهم التحقق يدويًا من الأوتار التي يجب ترشيحها ، وإلا فإن موقعك سيؤدي بسهولة إلى قيام هجمات البرمجة النصية عبر المواقع.
كيف ينبغي التعامل مع الصفحات مع محرر النص الغني؟
إذا كان للصفحة عناصر تحكم مع محرري النص الغني ، فإنها ستؤدي حتماً إلى تقديم علامات HTML للفئة. في هذه الحالة ، يتعين علينا إلى ValityAterequest = خطأ. فكيف تتعامل مع الأمن؟
وفقًا لنصيحة Microsoft ، يجب أن نعتمد سياسة تسمى السياسة القائمة على الأمان ، وصراحة .
أولاً ، نقوم بتشفير سلسلة الإدخال باستخدام httputily.htmlencode () وحظر علامات HTML تمامًا فيه.
بعد ذلك ، نستبدل علامات الأمان التي مهتمون بها واستبدالها بـ Reply (). على سبيل المثال ، إذا كنا نرغب في الحصول على ملصق ، فسوف نحل محله بشكل صريح.
رمز العينة كما يلي:
| فيما يلي مقتطف مقتبس: voidsubmitbtn_click (ObjectSender ، eventargse) ... { // ترميز سلسلة الإدخال ، بحيث تكون جميع علامات HTML غير صالحة. StringBuildersB = NewstringBuilder ( httputily.htmlencode (htmlinputtxt.text)) ؛ // ثم نسمح بشكل انتقائي <b> و <i> sb.replace (& lt ؛ b & gt ؛ ، <b>) ؛ sb.replace (& lt ؛/b & gt ؛ ،) ؛ sb.replace (& lt ؛ i & gt ؛ ، <i>) ؛ sb.replace (& lt ؛/i & gt ؛ ،) ؛ Response.write (sb.toString ()) ؛ } |
وبهذه الطريقة ، نسمح لبعض علامات HTML وحظر العلامات الخطيرة.
وفقًا للنصيحة التي قدمتها Microsoft ، يجب أن نسمح بعناية بعلامات HTML التالية ، لأن علامات HTML هذه قد تؤدي إلى هجمات البرمجة النصية عبر المواقع.
فيما يلي مقتطف مقتبس:
|
ربما يكون الشيء الأكثر مفهومًا هنا هو <img>. ومع ذلك ، بعد قراءة الكود التالي ، يجب أن تفهم خطرها.
| فيما يلي مقتطف مقتبس: <imgsrc = javaScript: Alert ('hello') ؛> <imgsrc = java 
 ؛ script: Alert ('hello') ؛> <imgsrc = java 
 ؛ script: Alert ('hello') ؛> |
من الممكن التسبب في تنفيذ JavaScript من خلال علامة <img> حتى يتمكن المهاجم من فعل كل ما يريد إخفاءه.
الشيء نفسه ينطبق على <style>:
| فيما يلي مقتطف مقتبس: <StyleType = Text/JavaScript> ... تنبيه ('hello') ؛ </style> |
| فيما يلي مقتطف مقتبس: خطأ الخادم في تطبيق '/yourapplicationPath' تم الكشف عن قيمة أمر محتمل. (txtName = <b>). الوصف: قد تم التحقق من صحة الطلب عن قيمة إدخال العميل المحتملة ، وقد تم إحباط معالجة الطلب. من خلال تعيين ValistereQuest = FALSE في توجيه الصفحة أو في قسم التكوين. تفاصيل الاستثناء: system.web.httprequestvalidationException: تم اكتشاف قيمة طلب محتمل. .... |