【发布时间】:2012-06-03 10:20:06
【问题描述】:
我的内容文件夹中有一些文件,我不希望用户在未经授权的情况下下载这些文件。如何防止用户通过在地址栏中键入 ...Content/{filename} 来访问文件?
【问题讨论】:
标签: asp.net-mvc model-view-controller
我的内容文件夹中有一些文件,我不希望用户在未经授权的情况下下载这些文件。如何防止用户通过在地址栏中键入 ...Content/{filename} 来访问文件?
【问题讨论】:
标签: asp.net-mvc model-view-controller
一种方法是将它放在 IIS 的上下文之外,而不是将它们放在 C:\inetpub\wwwroot 下
将其更改为C:\temp\files。
在您的数据库中有一个与文档名称关联的 GUID,并使用 GUID 显示文件的链接。
在您的控制器操作中,您只需接受 GUID,获取文件名,然后在响应中提供文件。
【讨论】:
有几种可能性。第一个包括在 web.config 中使用 <location> 标签:
<location path="Content">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
另一种可能性是将这些文件放在任何人都无法访问的文件夹中(例如 App_Data 文件夹),然后有一个控制器操作将服务于那些将使用 [Authorize] 属性修饰的文件。
【讨论】:
<configuration> 元素内部和<system.web> 外部。它在根。
<deny users="?" />。我已经更新了答案。
它对我不起作用。
<configuration>
<appSettings>
...
</appSettings>
<system.web>
...
</system.web>
<system.webServer>
...
</system.webServer>
<location path="Content">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
</configuration>
我运行我的 MVC 4.0 应用程序,登录和注销,无法访问任何应用程序页面,但仍然可以通过直接链接访问文件,如
http://localhost:80966/Content/Files/home.jpg
【讨论】: