IIS7: Comment bloquer l'accès avec un fichier web.config?

14

Je sais que IIS7 me permet d'avoir une configuration par répertoire avec le fichier xml web.config. J'ai un répertoire avec des fichiers de configuration qui ne veulent pas être accessibles sur le Web. Un fichier web.config local interdisant l'accès en lecture serait une bonne solution.

Quel devrait être le contenu d'un fichier web.config pour interdire l'accès Web aux fichiers?

Edit: j'essaie de mettre un fichier web.config avec ces contenus dans un fichier:

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

Mais je peux toujours accéder directement à un fichier dans le répertoire. Qu'est ce qui ne va pas avec ça? Comment déboguer ce qui se passe?

neves
la source

Réponses:

12

Vous utilisez system.web. Dans IIS7, vous devez utiliser system.webServer à la place. Cela bloquera tous les types de fichiers, pas seulement les fichiers ASP.NET. Par exemple, vous pouvez protéger par mot de passe jpg, gif, txt et tous les types de fichiers.

Cela ressemblerait à quelque chose comme ceci:

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

Et si vous souhaitez le définir pour un seul fichier:

 <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
la source
J'ai rencontré ma propre réponse plus d'un an plus tard et je voulais ajouter une note supplémentaire. Vous devez vous assurer que l'authentification par formulaire ou Windows est également activée, sinon seule la règle de suppression sera utile. Si vous avez activé l'authentification Windows, vous serez invité à saisir vos informations d'identification.
Scott Forsyth - MVP
+1 enfin! J'ai passé 3 heures à trouver ça! Merci
hofnarwillie
5

je pense que cela peut résoudre votre problème.
placez ce web.config dans un répertoire contenant le répertoire cible:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="target directory name"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>
Reza Roshan
la source
2
Pourriez-vous vérifier cela avant de soumettre cela comme réponse.
James A Mohler
Cela fonctionne pour moi. Notez également que vous pouvez mettre un nom de fichier en tant que segment.
Soenhay
4

Vous pouvez utiliser les nœuds d'emplacement sur le Web.config. Voici une explication détaillée sur msdn ; en un mot:

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

Vous pouvez également utiliser le? caractère générique pour spécifier que vous devez (autoriser / refuser) les utilisateurs anonymes

Jhonny D. Cano -Leftware-
la source
Comment ce fichier bloquerait-il l'accès au répertoire courant, mais autoriserait-il le répertoire "css"? il manque la balise <configuration> qui l'entoure.
neves
Votre autorisation n'autorise que les utilisateurs authentifiés. Si vous voulez des utilisateurs non authentifiés, vous devez inclure allow users = "?" ainsi que.
Nissan Fan
0
  • * signifie que chaque utilisateur connecté.
  • ? signifie des utilisateurs anonymes.

Vous devez utiliser ?.

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