IIS7: Wie blockiere ich den Zugriff mit einer web.config-Datei?

13

Ich weiß, dass ich mit IIS7 eine Konfiguration pro Verzeichnis mit der XML-Datei web.config durchführen kann. Ich habe ein Verzeichnis mit einigen Konfigurationsdateien, die nicht über das Internet zugänglich sein sollen. Eine lokale web.config-Datei, die den Lesezugriff verweigert, wäre eine gute Lösung.

Was sollte der Inhalt einer web.config-Datei sein, um den Webzugriff auf die Dateien zu verbieten?

Bearbeiten: Ich versuche, eine web.config-Datei mit diesen Inhalten in eine Datei zu setzen:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
            <system.web>
                    <authorization>
                            <deny users="*" /> <!-- Denies all users -->
                    </authorization>
            </system.web>
</configuration>

Aber ich kann immer noch direkt auf eine Datei im Verzeichnis zugreifen. Was stimmt damit nicht? Wie debugge ich, was passiert?

Neves
quelle

Antworten:

11

Sie verwenden system.web. In IIS7 sollten Sie stattdessen system.webServer verwenden. Dadurch werden alle Dateitypen blockiert, nicht nur ASP.NET-Dateien. Sie können beispielsweise JPG, GIF, TXT und alle Arten von Dateien mit einem Kennwort schützen.

Es würde ungefähr so ​​aussehen:

  <system.webServer>
      <security>
          <authorization>
              <remove users="*" roles="" verbs="" />
              <add accessType="Allow" roles="Administrators" />
          </authorization>
      </security>
  </system.webServer>

Und wenn Sie es nur für 1 Datei festlegen möchten:

 <location path="dontlook.jpg">
     <system.webServer>
         <security>
             <authorization>
                 <remove users="*" roles="" verbs="" />
                 <add accessType="Allow" roles="Administrators" />
             </authorization>
         </security>
     </system.webServer>
 </location>
Scott Forsyth - MVP
quelle
Ich bin ein Jahr später auf meine eigene Antwort gestoßen und wollte eine zusätzliche Notiz hinzufügen. Sie müssen sicherstellen, dass auch Formulare oder die Windows-Authentifizierung aktiviert sind, da sonst nur die Entfernungsregel hilfreich ist. Wenn Sie die Windows-Authentifizierung aktiviert haben, werden Sie aufgefordert, Ihre Anmeldeinformationen einzugeben.
Scott Forsyth - MVP
+1 Endlich! Habe 3 Stunden damit verbracht, das zu finden! Vielen Dank
Hofnarwillie
5

Ich denke, das kann dein Problem lösen.
Platzieren Sie diese web.config in einem Verzeichnis, das das Zielverzeichnis enthält:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="target directory name"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>
Reza Roshan
quelle
2
Könnten Sie dies überprüfen, bevor Sie es als Antwort senden?
James A Mohler
Das funktioniert bei mir. Beachten Sie auch, dass Sie einen Dateinamen als Segment eingeben können.
Soenhay
4

Sie können die Location-Knoten in der Web.config verwenden. Hier ist eine detaillierte Erklärung zu msdn ; in einer Nussschale:

<location path="Subdirectory">
    <system.web>
        <authorization>
            <deny users="*"/> <!-- Denies all users -->
        </authorization>
    </system.web>
</location>
<location path="Public_Directory">
    <system.web>
        <authorization>
            <allow users="*"/> <!-- Allows all users -->
        </authorization>
    </system.web>
</location>

Sie können auch die? Platzhalter, der angibt, dass anonyme Benutzer zugelassen / abgelehnt werden sollen

Jhonny D. Cano -Leftware-
quelle
Wie würde diese Datei den Zugriff auf das aktuelle Verzeichnis blockieren, aber auf das "css" -Verzeichnis zulassen? Es fehlt das <configuration> -Tag.
Neves
Ihre Erlaubnis erlaubt nur authentifizierte Benutzer. Wenn Sie nicht authentifizierte Benutzer möchten, sollten Sie allow users = "?" auch.
Nissan Fan
0
  • * bedeutet jeder angemeldete Benutzer.
  • ? bedeutet anonyme Benutzer.

Sie müssen verwenden ?.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.web>
        <authorization>
            <deny users="?" /> 
        </authorization>
    </system.web>
</configuration>
Ausgesetzt
quelle