كيف أمنع طلبات جميع فب *، * .cgi، الخ صفحات من داخل التطبيق 1.0 ASP.NET MVC استضافتها في IIS7؟

StackOverflow https://stackoverflow.com/questions/1539415

  •  20-09-2019
  •  | 
  •  

سؤال

وأود أن منع طلبات أي فب أو .cgi بغض النظر عن المعلومات وتحديد المسار.

وعلى سبيل المثال، عند استخدام العنوان التالي:

<اقتباس فقرة>   

وHTTP: // <م> مع mysite /Admin/Scripts/Setup.php

وومباريات طريقا الحالية:

routeCollection.MapRoute("Admin", "admin/{controller}/{action}/{uid}/{*pathInfo}", new { controller = "Admin", action = "Index", uid = "" });

ولكن لا يوجد تحكم عن الكتابات بحيث يلقي MVC ما يلي:

<اقتباس فقرة>   

ووIControllerFactory '' فعل   لن يعود وحدة تحكم ل   تحكم اسمه 'البرامج النصية ".

وماذا كنت تفضل حقا هو أن هذا الطلب اجتمع ببساطة مع من الصعب تفشل قبل MVC حصلت من أي وقت مضى إلى وحدة تحكم.

وأنا أعلم أنني يمكن أن تفعل ذلك من خلال تركيب وApplication_BeginRequest في Global.asax ورمي HttpException جديد (404، "غير موجود")، ولكن هذا ليس تماما حل أنيق وأنا أبحث عنه.

وكنت آمل حقا أن هذا من شأنه العمل:

routeCollection.IgnoreRoute("{resource}.php/{*pathInfo}");

ولكن لم يحدث ذلك.

ملحوظة: الجواب شون لينش يعمل كبيرة ولكن ما زلت أود حقا مثل System.Web.Routing أو حل System.Web.Mvc القائمة. وبهذه الطريقة أستطيع أن تسمح للمستخدمين بلدي لإضافة الاستثناءات الخاصة بها في وقت التشغيل.

هل كانت مفيدة؟

المحلول

إذا كنت استضافة الدعم مزود وحدة IIS7 URL إعادة كتابة ثم هل يمكن أن تحقق من هذا الرابط:

http://learn.iis.net /page.aspx/499/request-blocking---rule-template/

وتحديث هنا هو ما كنت وضعت في الملف web.config في قسم system.webserver:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="RequestBlockingRule1" patternSyntax="Wildcard">
                <match url="*" />
                <conditions>
                    <add input="{URL}" pattern="*.php*" />
                </conditions>
                <action type="CustomResponse" statusCode="403" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

نصائح أخرى

وأنا أعلم أن هذه هي وظيفة العمر ولكن إذا كنت تبحث عن تجاهل الطريق لطلبات فب (والبعض الآخر) بما في ذلك طلبات داخل المجلدات الفرعية ثم لقد وجدت رمز أدناه يعمل بشكل جيد (مقتبس من في تجاهل طرق المشاركة من فيل هاك )

وأود أيضا أن أضيف محددة تجاهل الطريق لطلب عرضية رمز اتصال التفاح (باستخدام البدل للأبعاد مختلفة)، وسمح لامتدادات الملفات المختلفة لفافيكون (جوجل شريط الأدوات وبعض المتصفحات الأخرى للبحث عن <لأ href = " https://stackoverflow.com/questions/3547934/favicon-format-gif-or-ico">png والمتحركة ففيكنس ).

وبالطبع يمكن إضافة تجاهل الطريق لجميع ملحقات الملفات الصورة ولكن في حالتي أنا لا تزال تريد توجيه بعض الطلبات الأخرى.

routes.IgnoreRoute("{*allphp}", new { allphp = @".*\.php(/.*)?" });
routes.IgnoreRoute("{*allcgi}", new { allcgi = @".*\.cgi(/.*)?" });
routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });

routes.IgnoreRoute("{*favicons}", new { favicons = @".*favicon\.(ico|gif|png)(/.*)?" });
routes.IgnoreRoute("{*allappleicon}", new { allappleicon = @"apple-touch-icon-.*\.png(/.*)?" });

وعلى الرغم من وجود هذه تجاهل الطرق، وأنا لا يزالون يعتقدون أن استخدام طلب حجب لملفات PHP هي الأفضل إذا كان لديك الوصول إلى القيام بذلك.

ولقد وجدت كيفية تجاهل الطريق في آسيا والمحيط الهادئ. أشكال صافي رابط التوجيه حيث قد عمل هذا، فإنه يستخدم في StopRoutingHandler الطبقة، وطالما أن طلبات فب لا يعمل من خلال توجيه هذا سوف ربما العمل.

إذا طلبات فب لا يمر معالج التوجيه ثم وهذا ربما لن يجدي نفعا.

هل يمكن منع هذه الملحقات حتى قبل أن يضرب IIS مع تصفية مايكروسوفت ISAPI URLSCAN.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top