如何保护上传的文档不被 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】:

您可能需要查看&lt;location&gt; 节点: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 表单直接访问的主要内容,如果未能解决你的问题,请参考以下文章

form表单的file文件上传那些事

加强对匿名 API 的访问的选项

Web API:使用 MultipartMemoryStreamProvider 时如何访问多部分表单值?

如何保护流密钥不被公开?

Objective-c:为啥在使用 KVC 时私有 ivars 不被外部访问隐藏

如何使用 Web3 访问受访问权限保护的智能合约功能?