IIS7: ¿Cómo bloquear el acceso con un archivo web.config?

14

Sé que IIS7 me permite tener una configuración por directorio con el archivo web.config xml. Tengo un directorio con algunos archivos de configuración que no quieren tener acceso a la web. Un archivo web.config local que prohíba el acceso de lectura sería una buena solución.

¿Cuál debería ser el contenido de un archivo web.config para prohibir el acceso web a los archivos?

Editar: estoy tratando de poner un archivo web.config con estos contenidos en un archivo:

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

Pero aún puedo acceder directamente a un archivo dentro del directorio. ¿Qué tiene de malo? ¿Cómo depuro lo que está sucediendo?

neves
fuente

Respuestas:

12

Estás usando system.web. En IIS7, debe usar system.webServer en su lugar. Esto bloqueará todos los tipos de archivos, no solo los archivos ASP.NET. Por ejemplo, puede proteger con contraseña jpg, gif, txt y todo tipo de archivos.

Se vería algo así:

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

Y si desea configurarlo para solo 1 archivo:

 <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
fuente
Me encontré con mi propia respuesta más de un año después y quería agregar una nota adicional. Debe asegurarse de que los formularios o la autenticación de Windows también estén habilitados, de lo contrario solo será útil la regla de eliminación. Si habilitó la autenticación de Windows, se le pedirá que ingrese sus credenciales.
Scott Forsyth - MVP
+1 ¡Por fin! ¡Pasé 3 horas encontrando esto! Gracias
hofnarwillie
5

Creo que esto puede resolver tu problema.
coloque este web.config en el directorio que contiene el directorio de destino:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="target directory name"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>
Reza Roshan
fuente
2
¿Podría verificar esto antes de enviarlo como respuesta?
James A Mohler
Esto funciona para mi. Además, tenga en cuenta que puede poner un nombre de archivo como un segmento.
Soenhay
4

Puede usar los nodos de ubicación en Web.config. Aquí hay una explicación detallada sobre msdn ; en una palabra:

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

También puedes usar el? comodín para especificar que debe (permitir / denegar) usuarios anónimos

Jhonny D. Cano -Leftware-
fuente
¿Cómo este archivo bloquearía el acceso al directorio actual, pero permitiría el directorio "css"? le falta la etiqueta <configuration> a su alrededor.
neves
Su permiso solo permite usuarios autenticados. Si desea usuarios no autenticados, debe incluir allow users = "?" también.
Nissan Fan
0
  • * significa cada usuario conectado.
  • ? significa usuarios anónimos.

Debes usar ?.

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