如何在IIS上限制/验证文件上载文件类型服务器端

Ale*_*bin 6 asp.net iis asp.net-mvc file-upload asp.net-mvc-3

我想有一个文件类型的白名单,用户有权上传到我的IIS服务器(我使用IIS v7.5).

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

<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>
Run Code Online (Sandbox Code Playgroud)

webconfig中是否有一个选项来设置允许的文件类型的白名单?或者唯一的选择是在文件完全上传时验证代码中的文件类型?什么是推荐的技术?我怎么能确定.docx,.pdf,.jpg等真的是它们是什么?

Jar*_*red 3

由于您需要服务器端,因此您可以使用文件 mime 类型。

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

如果您确实想将输入限制为特定文件扩展名,您可以简单地根据您想要接受的内容检查输入名称。如果通过了,您可以对我链接的帖子中的库进行外部参照,以确保用户不仅仅更改了您的文件扩展名。

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

编辑:根据迄今为止的评论......根据您所说的,您正在寻找的这种方法应该非常适合您。如果您只是想将其限制为您评论中列出的文件类型,我的建议是...对文件扩展名进行简单检查。如果有效,则将文件传递到urlmon.dll链接中列出的位置。确保它不会作为无效类型返回......又名可执行文件/java/zip/等。如果它不是无效类型,那么您将非常确定它是一个安全文件!

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