首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在IIS上限制/验证文件上传filetypes服务器端

如何在IIS上限制/验证文件上传filetypes服务器端
EN

Stack Overflow用户
提问于 2012-08-11 00:17:34
回答 3查看 11K关注 0票数 6

我希望有一个白名单的文件类型,用户被授权上传到我的IIS服务器(即时通讯使用IISv7.5)。

我有哪些选择?例如,为了将控制器中特定操作的文件大小限制为5MB,我在webconfig中添加了以下部分:

代码语言:javascript
运行
复制
<location path="home/fileupload">
  <system.web>
    <!-- maxRequestLength is in kilobytes (KB) -->
    <httpRuntime maxRequestLength="5120" /> <!-- 5MB -->
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- maxAllowedContentLength is in bytes -->
        <requestLimits maxAllowedContentLength="5242880"/> <!-- 5MB -->
      </requestFiltering>
    </security>
  </system.webServer>
</location>

在webconfig中是否有一个选项可以设置允许的文件类型的白名单?或者,当文件完全上传时,唯一的选择是在代码中验证文件类型吗?推荐的工艺是什么?我如何才能确定.docx、.pdf、.jpg等都是真实存在的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-18 13:55:51

因为你想要服务器端,你可以使用文件的mime类型。

THIS post展示了如何根据文件内容(而不是扩展名)确定MIME类型。

如果您确实希望将输入限制为特定的文件扩展名,则只需根据您希望接受的名称检查输入名称即可。如果通过,您可以对我链接的文章中的库执行xref,以确保用户没有更改您的文件扩展名。

这样做可以很好地确定文件是您想要接受的文件!

编辑:基于目前为止的评论...根据你所说的,你正在寻找的这个方法对你来说应该是非常好的。我的建议是,如果你只是想把它限制在你的评论中列出的文件类型……对文件扩展名做一个简单的检查。如果这是有效的,则将文件传递给链接中列出的urlmon.dll。确保它不会返回为无效的压缩可执行文件/ type....aka /zip/等。如果它不是无效类型,那么您将高度确定它是一个安全文件!

最后,通读那篇文章的评论,看起来urlmon.dll可能会隐式支持你想要的所有文件类型,这将消除检查它不是可执行文件或类似性质的东西的需要,但你需要确认doc/docx/xsl/xslx确实返回了有效的mime类型。

票数 3
EN

Stack Overflow用户

发布于 2012-08-18 10:15:16

不,没有web.config设置来限制上传的内容。验证上传数据的唯一可能方法是实际验证代码中的数据。

即使有一个设置,它也是无用的,因为它将基于从客户端接收的Content-Type头,这可能是非常错误的。

在代码中,您当然可以查看Content-Type头,但如果您试图验证上传的数据是特定类型的数据,则必须根据您期望的数据类型手动执行此操作。对于图像来说,这很容易。对于其他文件类型,这可能要困难得多。

票数 1
EN

Stack Overflow用户

发布于 2012-08-11 02:16:29

数据注释就是你要找的,这里有一个可能对你有帮助的搜索,google data anotaions

更新

我认为它验证了文件扩展名。如果你不想依赖file extensions,我认为你最好的选择就是验证MIME types。这更加复杂,并且因浏览器而异,并且可以被伪造(尽管这比伪造扩展更复杂)。

一个简单但不是免费的选择是使用Telerik RadAsyncUpload

您可以自己编写这段代码(尽管我从未尝试过) this可能会帮助您入门。(这篇文章讨论了这样一个事实,即如果没有IIS,你就不能可靠地检测mime类型,但它应该会让你上路。)

希望这能让你振作起来。正如你所知道的,你可以通过文件的大小来限制文件,通过扩展名来验证文件,如果你添加了MIME类型的验证,我想你已经做了所有你能做的。我认为这就是为了安全和不排除有效文件所能做的一切;虽然我听说过对文件进行哈希处理和其他一些选项,但这些选项将最挑衅地排除合法文件。

此外,正如我所提到的,MIME类型可以是假的,并发送到您的服务器,为了额外的安全,您应该在客户端和服务器端进行验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11905561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档