在IIS 7.0中发布.cs扩展和其他扩展

时间:2011-01-17 15:15:57

标签: html asp.net-mvc asp.net-mvc-2 iis

我正在开发一个Web应用程序并使用IIS运行它。我的应用程序是文件服务器。我需要在Web浏览器中可视化文件,我在查看某些文件或目录时遇到了一些麻烦。

例如,我无法查看扩展名为.cs的文件或名为bin的目录内容。 Web服务器为这些URL返回404:

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.

我猜这是IIS的一种保护。我的问题是:

  1. 你知道为什么IIS正在过滤这些文件吗?
  2. 您知道如何配置IIS以允许检索这些URL吗?
  3. 对我来说最重要的问题是:

    • 我需要为许多客户部署我的Web应用程序,所以我想以编程方式配置它。您知道它是否可以在Web应用程序中配置,而不是IIS正确配置?在其他情况下,我怎么能用脚本或类似的东西配置它呢?

5 个答案:

答案 0 :(得分:10)

好吧,

最后我不得不更改IIS设置,允许覆盖requestFiltering

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

然后我在Web.config中使用了以下配置: 请注意,现在 Web服务器中的所有文件都不受保护。您需要设置规则以保护bin目录,以及代码文件或任何您想要的内容。

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

答案 1 :(得分:7)

安装.NET Framework并注册ASP.NET时,默认情况下会告诉IIS不要提供这些文件。如果您真的想要解决此问题,则需要修改IIS中的请求过滤部分。

下面的示例显示了如何启用.cs扩展名:

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

答案 2 :(得分:2)

由于系统上安装了asp.net,这是一项安全措施。

From Microsoft

  

URL中包含/ bin的所有请求都是   拒绝并返回404错误(IIS   6.0)

     

安装IIS 6.0和ASP.NET时会发生这种情况。为了   采取更主动的立场   针对恶意用户和攻击者,   ASP.NET ISAPI过滤器,   aspnet_filter.dll,阻止传入   请求包含URL中的/ bin。   这种行为发生在服务器范围内,   无论请求是否适用   静态或动态内容。

     

在   这个问题的首选解决方案是   修改内容的路径   服务器,以便/ bin不是必需的   在任何请求中。

     

如果是内容网址   无法修改,另类   解决方案是设置一个注册表项   停止ASP .NET ISAPI筛选器   过滤包含/ bin的请求   URL。这是服务器范围的   设置。

最好避免所有/ bin文件夹,而不是在服务器上启用

要启用服务.cs文件,请尝试此Serverfault文章 https://serverfault.com/questions/175499/serving-cs-csproj-files-on-iis7-5

由于他们的建议是一个webconfig修复程序,您可以根据需要在每个站点上应用它。

答案 3 :(得分:2)

我会建议你做错了。您不希望IIS出于各种原因直接从磁盘提供文件(例如,任何.html或.xml文件将被重新加入,而不是下载其内容)。

您要做的是让您的代码将文件发送给用户,而不是让IIS执行此操作。这将绕过IIS的限制(因为它是你发送代码,而不是它),它仍将保持IIS对你的应用程序文件夹结构的限制。

答案 4 :(得分:1)

为了安全起见,我们会过滤这些文件,例如,如果我知道您的网站有http://example.com/default.aspx页面,我可以在浏览器中输入http://example.com/default.aspx.cs来下载该页面的代码。 bin文件夹也是如此。

您是如何通过自己的用户界面或启用目录浏览来显示这些文件的?