2011-01-17 16 views
7

Estoy desarrollando una aplicación web y ejecutándola mediante IIS. Mi aplicación es un servidor de archivos. Necesito visualizar archivos en el navegador web y tengo algunos problemas para ver algunos archivos o directorios.Publicar extensiones .cs y otras en IIS 7.0

Por ejemplo, no puedo ver archivos con la extensión .cs ni el contenido de los directorios llamados bin. El servidor web devuelve un 404 para esas URL:

Server Error 

HTTP Error 404 - File or directory not found. 

Description: The resource you are looking for might have been removed, 
had its name changed, or is temporarily unavailable. 

Server Version Information: Internet Information Services 7.0. 

Supongo que este es un tipo de protección que tiene IIS. Mis preguntas son:

  1. ¿Sabes por qué IIS está filtrando esos archivos?
  2. ¿Sabes cómo configurar IIS para permitir recuperar esas URLS?

Y la pregunta más importante para mí:

  • necesito para desplegar mi aplicación web para muchos clientes, por lo que me gustaría configurar mediante programación. ¿Sabe si puede ser configurado en la aplicación web, en su lugar el IIS correctamente? En otro caso, ¿cómo podría configurarlo con un script o similar?
+2

La pregunta es: ¿por qué quieres hacer eso? Cuando dice que es un servidor de archivos, ¿quiere decir que quiere crear algo como www.net2ftp.com? En ese caso, debe tener su lógica de aplicación para mostrar los contenidos de los directorios, no permitir que IIS haga eso, lo que no es seguro. –

+0

@Frantisek: estamos desarrollando un cliente web para Plastic SCM, un sistema de control de versiones, algo así como GitHub. El problema es que IIS está filtrando .cs, bin, etc. Debo permitir todas las rutas y solo proteger mi código. –

Respuesta

10

Bueno,

Finalmente, tuvimos que cambiar la configuración de IIS, lo que permite anular el requestFiltering:

In file %systemroot%\System32\inetsrv\config\applicationHost.config change: 
<section name="requestFiltering" overrideModeDefault="Allow" /> 

Y entonces utilizó la siguiente configuración en mi Web.config: Tenga en cuenta que ahora todos los archivos en el servidor web están desprotegidos. Debe configurar sus reglas para proteger su directorio bin, y también sus archivos de código, o lo que quiera.

<system.webServer> 
    <security> 
     <!-- Very important, the IIS configuration must have the 
      overrideModeDefault to allow in the file 
      %systemroot%\System32\inetsrv\config\applicationHost.config --> 
     <!-- section name="requestFiltering" overrideModeDefault="Allow" /> --> 
     <requestFiltering> 
     <fileExtensions allowUnlisted="true"> 
      <remove fileExtension=".asa" /> 
      <remove fileExtension=".asax" /> 
      <remove fileExtension=".ascx" /> 
      <remove fileExtension=".master" /> 
      <remove fileExtension=".skin" /> 
      <remove fileExtension=".browser" /> 
      <remove fileExtension=".sitemap" /> 
      <remove fileExtension=".config" /> 
      <remove fileExtension=".cs" /> 
      <remove fileExtension=".csproj" /> 
      <remove fileExtension=".vb" /> 
      <remove fileExtension=".vbproj" /> 
      <remove fileExtension=".webinfo" /> 
      <remove fileExtension=".licx" /> 
      <remove fileExtension=".resx" /> 
      <remove fileExtension=".resources" /> 
      <remove fileExtension=".mdb" /> 
      <remove fileExtension=".vjsproj" /> 
      <remove fileExtension=".java" /> 
      <remove fileExtension=".jsl" /> 
      <remove fileExtension=".ldb" /> 
      <remove fileExtension=".dsdgm" /> 
      <remove fileExtension=".ssdgm" /> 
      <remove fileExtension=".lsad" /> 
      <remove fileExtension=".ssmap" /> 
      <remove fileExtension=".cd" /> 
      <remove fileExtension=".dsprototype" /> 
      <remove fileExtension=".lsaprototype" /> 
      <remove fileExtension=".sdm" /> 
      <remove fileExtension=".sdmDocument" /> 
      <remove fileExtension=".mdf" /> 
      <remove fileExtension=".ldf" /> 
      <remove fileExtension=".ad" /> 
      <remove fileExtension=".dd" /> 
      <remove fileExtension=".ldd" /> 
      <remove fileExtension=".sd" /> 
      <remove fileExtension=".adprototype" /> 
      <remove fileExtension=".lddprototype" /> 
      <remove fileExtension=".exclude" /> 
      <remove fileExtension=".refresh" /> 
      <remove fileExtension=".compiled" /> 
      <remove fileExtension=".msgx" /> 
      <remove fileExtension=".vsdisco" /> 
     </fileExtensions> 
     <hiddenSegments> 
      <remove segment="web.config" /> 
      <remove segment="bin" /> 
      <remove segment="App_code" /> 
      <remove segment="App_GlobalResources" /> 
      <remove segment="App_LocalResources" /> 
      <remove segment="App_WebReferences" /> 
      <remove segment="App_Data" /> 
      <remove segment="App_Browsers" /> 
     </hiddenSegments>   
     </requestFiltering> 
    </security> 
    ... 
</system.webServer> 
7

Cuando instale .NET Framework y registre ASP.NET, le indicará a IIS que no sirva estos archivos por defecto. Si desea REALMENTE necesitar modificar la sección Filtrado de solicitudes en IIS.

El ejemplo que sigue muestra cómo se deben permitir cs extensiones:

<system.webServer> 
    <security> 
     <requestFiltering> 
      <fileExtensions> 
       <remove fileExtension=".cs" /> 
       <add fileExtension=".cs" allowed="true" /> 
      </fileExtensions> 
     </requestFiltering> 
    </security> 
</system.webServer> 
+0

¿Dónde se encuentra este archivo? –

+0

web.config en el directorio de la aplicación. –

+1

Intenté agregar esto al Web.config pero parece no funcionar. Aparece un error interno del servidor 500. He verificado la sintaxis y está bien. ¿Debo configurar también el IIS o solo mi aplicación? –

1

Esos archivos son filtrados para la seguridad, por ejemplo, si sé que su sitio web tiene una página en http://example.com/default.aspx yo podría ser capaz de simplemente descargar el código para esa página ingresando http://example.com/default.aspx.cs en mi navegador. Lo mismo aplica para la carpeta bin.

¿Cómo intenta mostrar estos archivos a través de su propia IU o habilitando la exploración de directorios?

2

Esta es una medida de seguridad debido a que asp.net está instalado en el sistema.

From Microsoft

Todas las solicitudes con/bin en la dirección URL son rechazadas y devuelven un error 404 (IIS 6,0)

Esto ocurre cuando IIS 6.0 y ASP.NET están instalados. Con el fin a adoptar una postura más proactiva contra los usuarios maliciosos y atacantes, el filtro ISAPI de ASP.NET, aspnet_filter.dll, bloques entrante solicitud que contiene/bin en la dirección URL. Este comportamiento ocurre en todo el servidor, , independientemente de si la solicitud es contenido estático o dinámico.

La solución preferida a este problema es modificar la ruta de contenido en el servidor de modo que/bin no es necesario en cualquier petición.

Si el URL contenido no se puede modificar, una solución alternativa es establecer una clave de registro que detiene el filtro ISAPI ASP .NET desde solicitudes de filtrado que contienen/bin en la URL. Esta es una configuración de en todo el servidor.

Es mejor evitar todas las carpetas/bin que permitirá que en su servidor

Para habilitar servir archivos .cs tratan este artículo Serverfault https://serverfault.com/questions/175499/serving-cs-csproj-files-on-iis7-5

medida que su sugerencia es una solución webconfig, se puede aplicar en un sitio por sitio como lo deseaba.

2

Le sugiero que haga las cosas mal. No desea que IIS sirva sus archivos directamente desde el disco por una variedad de razones (por ejemplo, cualquier archivo .html o .xml se renegará en lugar de descargar sus contenidos).

Lo que quiere hacer es hacer que su código envíe los archivos al usuario, en lugar de dejar que IIS lo haga. Esto omitirá las restricciones de IIS (porque es usted el que envía el código, no) y aún mantendrá las restricciones de IIS en su lugar para la estructura de la carpeta de su aplicación.

Cuestiones relacionadas