如何防止直接访问asp.net中的文件和文件夹?

时间:2014-11-17 08:21:59

标签: asp.net iis

我在IIS7上部署了一个Web应用程序,并且该应用程序将邮件附件文件保存在网络服务器的Attachments文件夹中,并且从附件下载附件时它正常工作 应用

问题是,从Chrome浏览器查看的相同网址是从其他计算机输入的,可以查看/下载相同的网址。我在谷歌搜索后尝试了几种解决方案,但是网络服务器上的附件文件夹已经为网络服务启用了安全性。

http://machine-121/AdminManagement/Attachments/58501/17112014131251/FilledForm.pdf(可以阅读)

我试过

<configuration>
<system.web>
<authentication mode="Forms"/>
<authorization>
<deny users="?"/>  <!--This will restrict anonymous user access-->
</authorization>
</system.web>
<location path="login.aspx"> <!-- Path of your Registration.aspx page -->
<system.web>
<authorization>
<allow users="*"/> <!-- This will allow users to access to everyone to Registeration.aspx--> 
</authorization>
</system.web>
</location>
</configuration>

但无法取得任何建议/帮助会有很大的帮助。

4 个答案:

答案 0 :(得分:2)

问题是ASP.NET处理程序没有捕获.pdf扩展名,因为它不是映射到ASPNET_ISAPI(又名ASP.NET HTTP Runtime)的文件类型。因此,web.config文件中的过滤不适用于这些文件。

您有两种选择:

  1. 使用IIS配置面板将所有文件扩展名(或至少是这种情况下的pdf文件)映射到ASPNET_ISAPI。请注意,这会增加服务器的负载,因为IIS本身的开销低于IIS + ASP.NET;
  2. 使用为您获取文件的HTTP处理程序。这允许您对文件访问进行一些细粒度的授权检查。请参阅Introduction to HTTP Handlers

答案 1 :(得分:0)

此问题的最佳解决方案是创建HTTP处理程序,您可以在其中根据特定条件限制下载文件。查看此link了解更多信息

答案 2 :(得分:0)

我认为最简单的方法是将runAllManagedModulesForAllRequests属性添加到web.config中的modules部分,如下所示:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer>

答案 3 :(得分:0)

管理以阻止I​​IS中的XML直接访问,并仍允许应用程序使用以下规则查询文件:

<rule name="Prevent XML direct access" enabled="true" stopProcessing="true">
<match url=".*filename\.xml$" />
<conditions>
    <add input="{QUERY_STRING}" pattern="^part_of_query.*$" negate="true" />
</conditions>
<action type="Redirect" url="/error" appendQueryString="false" />