IIS7: Como bloquear o acesso com um arquivo web.config?

13

Eu sei que o IIS7 me permite ter uma configuração por diretório com o arquivo xml web.config. Eu tenho um diretório com alguns arquivos de configuração que não desejam ser acessíveis pela web. Um arquivo web.config local que proíba o acesso de leitura a ele seria uma boa solução.

Qual deve ser o conteúdo de um arquivo web.config para proibir o acesso da web aos arquivos?

Edit: Estou tentando colocar um arquivo web.config com este conteúdo em um arquivo:

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

Mas ainda posso acessar diretamente um arquivo dentro do diretório. O que há de errado com isso? Como depuro o que está acontecendo?

Neves
fonte

Respostas:

11

Você está usando system.web. No IIS7, você deve usar system.webServer. Isso bloqueará todos os tipos de arquivos, não apenas os arquivos ASP.NET. Por exemplo, você pode proteger com senha jpg, gif, txt e todos os tipos de arquivos.

Seria algo como isto:

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

E se você quiser configurá-lo para apenas 1 arquivo:

 <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
fonte
Encontrei minha própria resposta mais de um ano depois e queria adicionar uma nota extra. Você deve certificar-se de que a autenticação de formulários ou janelas também esteja ativada, caso contrário, apenas a regra de remoção será útil. Se você ativou a Autenticação do Windows, será solicitado a inserir suas credenciais.
Scott Forsyth - MVP
+1 Finalmente! Passado 3 horas encontrando isso! Obrigado
hofnarwillie
5

Eu acho que isso pode resolver seu problema.
coloque este web.config no diretório que contém o diretório de destino:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="target directory name"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>
Reza Roshan
fonte
2
Você pode verificar isso antes de enviá-lo como resposta.
James A Mohler
Isso funciona para mim. Além disso, observe que você pode colocar um nome de arquivo como um segmento.
Soenhay 18/07/19
4

Você pode usar os nós de localização no Web.config. Aqui está uma explicação detalhada sobre o msdn ; em poucas palavras:

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

Você também pode usar o? curinga para especificar que você deve (permitir / negar) usuários anônimos

Jhonny D. Cano - Talheres-
fonte
Como esse arquivo bloqueia o acesso ao diretório atual, mas permite o diretório "css"? está faltando a marca <configuração> ao seu redor.
Neves
Sua permissão permite apenas usuários autenticados. Se você deseja usuários não autenticados, inclua allow users = "?" também.
Nissan Fan
0
  • * significa todo usuário conectado.
  • ? significa usuários anônimos.

Você deve usar ?.

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