سؤال

أواجه مشكلة في محاولة تأمين المحة. لقد تابعت Phil Haacked's الدورة التعليمية, ، مع الفرق الوحيد يجري المشروع التجريبي هو تطبيق ويب ومشروعي هو موقع ويب.

   <add verb="POST,GET,HEAD" path="/admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />

   <location path="admin">
        <system.web>  
            <authorization>  
                <deny users="?"/>  
            </authorization>  
        </system.web> 
    </location>

مع الرائدة "/" أتلقى الاستجابة التي "لا يمكن العثور على المورد". وبعد

على سبيل المثال دون الرائدة "/"

www.mysite.com/admin/elmah.axd - مشغلات المصادقة
www.mysite.com/asdasdasd/admin/elmah.axd - لا يؤدي إلى المصادقة ويعرض المهد

كيف يمكنني التأكد من أن الهما آمنة مع الحفاظ على القدرة على عرض السجل عن بعد؟

شكرا.

لاحظ للآخرين:
بعد إجابة آلان أدناه النتائج التالية.

www.mysite.com/admin/elmah.axd - مشغلات المصادقة
www.mysite.com/admin/asdasdasd/elmah.axd - يؤدي المصادقة
www.mysite.com/asdasdasd/admin/elmah.axd - لا يمكن العثور على المورد. (بالضبط ما أردنا)

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

المحلول

لقد لعبت حول web.config وحصلت على ما يلي للعمل. في الأساس بدلا من وضع Elmah.axd Httphandler في النظام العام. ويب، أضفه خصيصا في System.Web من موقع مسار "المسؤول" الخاص بك.

<location path="admin">
    <system.web>
        <httpHandlers>
            <add verb="POST,GET,HEAD" path="elmah.axd"
                 type="Elmah.ErrorLogPageFactory, Elmah" />
        </httpHandlers>
        <authorization>
            <deny users="?"/>
        </authorization>
    </system.web>
</location>

نصائح أخرى

إذا كنت تستخدم ASP.NET MVC، فستحتاج إلى أن يكون لديك محرك التوجيه يتجاهل هذا المسار. إذا كنت ترغب في نقل elmah إلى /admin/elmah.axd على سبيل المثال، يجب عليك إضافة ما يلي إلى Global.asax.cs:

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");

بعد أن أمضيت أثناء محاولة الحصول على هذا العمل من خلال الترقيع معا بت نصيحة مختلفة من كل إجابات، قمت بتجميع حل كامل يجب أن يعمل لجميع النكهات من IIS.

إليك ما يجب أن يكون في كل قسم من أقسام الويب الخاصة بك على الويب:

<configuration>
  <configSections>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>

  <elmah>
    <!-- set allowRemoteAccess="0" for extra security -->
    <security allowRemoteAccess="1"/>
  </elmah>

  <system.web>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>
  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>
  </system.webServer>

  <location path="admin">
    <system.web>
      <authorization>
        <!--<allow users="Admin" /> -->
        <deny users="?" />
      </authorization>
      <httpHandlers>
        <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
      </httpHandlers>
    </system.web>
    <system.webServer>
      <handlers>
        <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
      </handlers>
    </system.webServer>
  </location>

</configuration>

وإذا كنت تستخدم ASP.NET MVC، أضف

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");

في طريقة تسجيل الخاص بك.

في IIS 7.5 Windows Server 2008، يوجد قسم آخر يسمى System.Webserver. من أجل العمل، يجب إضافة هذا:

<system.webServer>
  <handlers>
   <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
  </handlers>
</system.webServer>

لقد جربت بعض الفروق، لكنني غير قادر على استخدام الحل المذكور أعلاه لمنع '/blah/elmah.axd' من العمل.

أي اقتراحات حول جعل الحل الحل الأعلى لعمل IIS 7.X؟

شكرا.

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