2016-05-06 21 views
7

Als Testeinstellung, ich versuche, die web.config zu verwenden Sicherheit zu steuern, in folgenden Punkten:alle Dateien in einem Verzeichnis, über web.config

  1. Deny Zugriff auf alle Dateien in einem Verzeichnis, mit Ausnahme für eine bestimmte Datei
  2. erlauben den Zugriff auf alle Dateien in einem Verzeichnis, mit Ausnahme einer bestimmten Datei

so stelle ich die web.config wie folgt zusammen:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 

    <!-- Deny access to all files in a directory, except for a specific file --> 
    <location path="NonAccessibleDirectory"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

    <location path="NonAccessibleDirectory/AccessibleFile.html"> 
    <system.web> 
     <authorization> 
      <allow users="?"/> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

    <!-- Allow access to all files in a directory, except for a specific file --> 
    <location path="AccessibleDirectory/NonAccessibleFile.html"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 

</configuration> 

Wie erwartet:

  • Wenn ich dem nicht zugänglichen Verzeichnis durchsuchen, und geben Sie keine Datei, ich Zugang erhalten verweigert
  • Wenn ich zum zugängliches Verzeichnis durchsuchen, und geben Sie keine Datei, kann ich finden sie in der Liste der Dateien

die Probleme, die ich habe, sind:

  • Wenn ich dem nicht zugänglichen Verzeichnis durchsuchen und eine Datei angeben, ich kann es sehen und ich hätte erwartet, dass kein Zugriff gewährt wird.
  • Wenn ich zum barrierefreien Verzeichnis blättern und eine Datei angeben, die ich über die web.config gesperrt habe, kann ich sie immer noch anzeigen, und ich hätte erwartet, dass das nicht der Fall ist erteilter Zugang

Amy Ich konfiguriere die Dinge falsch?

Antwort

9

Sie können in der Differenz zwischen ASP.NET URL-Autorisierung und IIS URL Authorization ausgeführt werden. Eine ausführliche Zusammenfassung zu diesem Thema ist bei http://www.iis.net/learn/manage/configuring-security/understanding-iis-url-authorization#Differences

Kurz gesagt, was mit ASP.NET geschieht mit web.config standardmäßig ist, dass es die erlauben und verweigern Regeln zu Dateien, die von dem verwalteten Handler behandelt nur anwenden.

Dateien wie .txt- und .html-Dateien werden von IIS und nicht von ASP.NET verarbeitet, daher werden die Autorisierungsregeln nicht auf sie angewendet.

Sie können dies testen, indem Sie dies zu Ihrer Hauptdatei web.config hinzufügen, um die IIS-Version zu verwenden.

<system.webServer> 
    <modules> 
     <remove name="UrlAuthorization" /> 
     <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" /> 
    </modules> 
</system.webServer> 

Getestet habe ich diese mit derselben Sicherheit und gleiche Verzeichnisse und Dateien sowie alle erscheint

Eine vollständigere Version zu arbeiten, wenn Sie andere Authentifizierungsmethoden wie Formulare könnte dies

<system.webServer> 
    <modules> 
     <add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" /> 
     <remove name="UrlAuthorization" /> 
     <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" /> 
     <remove name="DefaultAuthentication" /> 
     <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" /> 
    </modules> 
</system.webServer> 
sein
+0

Dies ist genau, was passiert, was Sinn macht, weil ich auf meiner Seite die System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal() -Methode verwende, um Links zu deaktivieren, auf die der Benutzer keinen Zugriff hat und die sie auch dann richtig deaktivieren Ich kann auf die Dateien zugreifen, indem ich eintippe in der URL. – Jeremy

+1

Das Ändern meiner HTML-Seiten in aspx-Seiten hat mein Problem gelöst. Ebenso wie das Halten der HTML-Seiten, aber das Verwenden von System.Web.Security.UrlAuthorizationModule für UrlAuthorization – Jeremy

Verwandte Themen