IIS7: Bir web.config dosyasıyla erişimi nasıl engelleyebilirim?


14

IIS7'nin web.config xml dosyasıyla dizin başına yapılandırmaya sahip olmamı sağladığını biliyorum. Web'den erişilebilir olmak istemeyen bazı yapılandırma dosyaları olan bir dizin var. Okuma erişimi yasaklayan yerel bir web.config dosyası güzel bir çözüm olacaktır.

Dosyalara web erişimini yasaklamak için bir web.config dosyasının içeriği ne olmalıdır?

Düzenleme: Bu içeriğe sahip bir web.config dosyasını bir dosyaya koymaya çalışıyorum:

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

Ama yine de doğrudan dizinin içindeki bir dosyaya erişebiliyorum. Bunun nesi var? Olanları nasıl ayıklayabilirim?

Yanıtlar:


12

System.web kullanıyorsunuz. IIS7'de bunun yerine system.webServer kullanmalısınız. Bu, yalnızca ASP.NET dosyalarını değil, tüm dosya türlerini engeller. Örneğin, jpg, gif, txt ve her türlü dosyayı parola ile koruyabilirsiniz.

Bunun gibi bir şey olurdu:

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

Ve sadece 1 dosya için ayarlamak istiyorsanız:

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

Bir yıl sonra kendi cevabımla karşılaştım ve fazladan bir not eklemek istedim. Formların veya pencerelerin kimlik doğrulamasının da etkinleştirildiğinden emin olmalısınız, aksi takdirde yalnızca kaldırma kuralının yararlı olması gerekir. Windows Kimlik Doğrulaması'nı etkinleştirdiyseniz, kimlik bilgilerinizi girmeniz istenir.
Scott Forsyth - MVP

+1 Sonunda! Bunu bulmak için 3 saat geçirdim! Teşekkür ederim
hofnarwillie

5

bence bu sorununuzu çözebilir.
bu web.config dosyasını hedef dizini içeren dizine yerleştirin:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="target directory name"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

2
Bunu yanıt olarak göndermeden önce bunu doğrulayabilir misiniz?
James A Mohler

Bu benim için çalışıyor. Ayrıca, bir dosya adını segment olarak koyabileceğinizi unutmayın.
Soenhay

4

Web.config dosyasındaki Konum düğümlerini kullanabilirsiniz. İşte msdn hakkında ayrıntılı açıklama ; kısaca:

<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>

Ayrıca? anonim kullanıcılara (izin ver / reddet) kullanıcıları belirtmek için joker karakter


Bu dosya geçerli dizine erişimi nasıl engeller, ancak "css" dizinine nasıl izin verir? etrafında <configuration> etiketi eksik.
neves

İzniniz yalnızca kimliği doğrulanmış kullanıcılara izin verir. Kimliği doğrulanmamış kullanıcılar istiyorsanız allow users = "?" de.
Nissan Fan

0
  • * giriş yapan her kullanıcı anlamına gelir.
  • ? anonim kullanıcılar anlamına gelir.

Kullanmalısınız ?.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.web>
        <authorization>
            <deny users="?" /> 
        </authorization>
    </system.web>
</configuration>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.