如何保护上传的文档不被 Web 表单直接访问
Posted
技术标签:
【中文标题】如何保护上传的文档不被 Web 表单直接访问【英文标题】:how to protect uploaded documents from direct access in web forms 【发布时间】:2015-07-18 15:46:29 【问题描述】:我有一个允许用户上传文档的 c#.net 应用程序。然后扫描文档中的恶意软件并保存。这些文档保存在共享文件和上传文件夹中。共享文件位于单独服务器上的 Intranet 上。 uploads 文件夹与应用程序位于同一目录中,但不是应用程序的一部分。主机服务器正在运行 iis 7,但目录列表已关闭。
问题在于,如果外部用户能够猜出命名约定和文件名,他们可以将其输入浏览器并查看文档。
应用程序在用户帐户下运行。我们尝试将上传文件夹的权限设置为只允许应用程序用户帐户访问,但没有成功。
我还尝试将网络配置添加到文件夹:
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow users="application_user_account" />
<deny users="?" />
</authorization>
</system.web>
</configuration>
这在放置在上传文件夹中时不起作用,但是当它意外放置在上一级文件夹中时,服务器拒绝所有用户访问环境中托管的所有应用程序。
在这种情况下,有没有人有防止直接访问上传文件夹的解决方案?
【问题讨论】:
【参考方案1】:您可能需要查看<location>
节点:Click Here
<location path="Logon.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
这似乎与以下内容重复:How to restrict folder access in asp.net
【讨论】:
【参考方案2】:将上传文件夹移动到App_Data
。
例如~/App_Data/Uploads
App_Data
是一个无法从网络读取的特殊文件夹。
任何导航到example.com/App_Data/Uploads/Foo.docx
的尝试都将导致授权错误。例如一个HTTP 403 Forbidden
HTTP 响应..
【讨论】:
我今天一直在尝试实施这个解决方案。我发现这篇关于使用 App_Data 文件夹的文章:codeproject.com/Articles/31557/… 我是否需要设置一个进入 App_Data 文件夹的数据库文件,然后我可以将文件插入其中?最初我遇到拒绝访问错误,但在调整路径后,我能够通过应用程序而不会抛出错误,但是文件没有登陆我的 App_Data 文件夹,并且没有在服务器上创建包含这些的 App_Data 文件夹文件。以上是关于如何保护上传的文档不被 Web 表单直接访问的主要内容,如果未能解决你的问题,请参考以下文章
Web API:使用 MultipartMemoryStreamProvider 时如何访问多部分表单值?