【问题标题】:How to Prevent direct access to files and folders in asp.net?如何防止直接访问asp.net中的文件和文件夹?
【发布时间】:2014-11-17 08:21:59
【问题描述】:

我在 IIS7 上部署了一个 Web 应用程序,该应用程序的邮件附件文件保存在 Web 服务器的 Attachments 文件夹中,当附件从 应用。

问题是当从 Chrome 查看的相同 url 从不同的机器输入时,可以查看/下载相同的 URL。我在谷歌搜索后尝试了几个解决方案,但这里网络服务器上的 Attachments 文件夹为网络服务启用了安全性。

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>

但未能成功,任何建议/帮助都会有很大帮助。

【问题讨论】:

  • 我不会直接公开这些文件。我会让所有请求都通过一个中心函数,该函数接受用户名和文件名(ID?)并确定他们是否应该能够获取文件。如果是这样,只需使用 Repsonse 直接向他们发送文件 - 不使用直接链接。
  • 嗨瑞恩,如果您可以指向相同的参考链接,请多多关照。
  • 你想在 web.cofig 中使用“请求过滤”之类的东西。如果是这样,请检查 user1160006 在此问题中的底部答案:stackoverflow.com/questions/6822173/…

标签: asp.net iis


【解决方案1】:

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

你有两个选择:

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

【讨论】:

  • 感谢 Patrick 的建议,并想知道如果我使用 Impersonatio...
  • 我认为你句子的最后一部分丢失了。
  • 它只是要求使用“模仿”
  • 你打算用它做什么?上述所有规则仍然适用。
  • Patrick 根据您的建议,我在 IIS 7.5 上将 *.pdf 映射到 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll 但现在我得到一个空白窗口通过应用程序或直接 URL 访问是否有我遗漏的东西请帮助
【解决方案2】:

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

【讨论】:

  • 感谢 Ghyath,您的解决方案似乎很理想,但只是想确认管理员和客户端站点都在使用链接 machine-121/AdminManagement/Attachments/58501/FilledForm.pdf 将更新相应网络服务器的 web.config 服务。
  • 对不起,我没有明白你的意思。请提供更多解释。
  • 我的意思是http处理程序模块只会部署在具有文件文件夹的网络服务器上,因为它也可以从客户端访问。
【解决方案3】:

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

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

【讨论】:

  • Brandon,尝试了您的建议,但无法解决问题。
  • 嗡嗡声很奇怪。我经常用这个。它应该根据您的授权设置限制对所有文件(不仅仅是 .aspx)的访问。不这样做吗?您无需身份验证即可访问 pdf 文件?
【解决方案4】:

设法阻止 IIS 中的 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" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多