如何限制/验证文件上传的文件类型在IIS服务器端(How to restrict/validate

2019-09-21 03:14发布

我想有文件类型是用户有​​权上传到我的IIS服务器(使用IIS V7.5 IM)的白名单。

是什么,我有选择吗? 例如,为了限制对文件大小为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>

有没有在webconfig的选项来设置文件类型允许的白名单? 或者是唯一的选择是验证文件类型的代码时,该文件被完全上传? 什么是推荐的工艺? 我怎么能肯定的是,.DOCX,.PDF,.JPG,等真的是它们是什么?

Answer 1:

既然你是想服务器端,您可以使用这些文件的MIME类型。

此职位显示了如何确定基于文件内容(而不是通过扩展名)的MIME类型。

如果你想限制输入到特定的文件扩展名,你可以简单地核对要接受什么样的输入名称。 如果通过,你可以做一个对外部参照在后我联系,以确保用户不只是改变你的文件扩展名的库。

这样做将提供一个很好的度的把握,该文件是要接受一个!

编辑:根据到目前为止....对你说你正在寻找此方法应该很好地为你工作基于评论。 我的建议是,如果你只是想限制它在你的意见之一所列类型的文件...请在文件扩展名进行简单的检查。 如果是有效的,那么该文件传递到urlmon.dll的链接中列出。 请确保它不回来作为无效型....又名可执行/ JAVA / ZIP /等。 如果它不是一个无效的类型,那么你将有一个非常高度的肯定,这是一个安全的文件!

最后,通过对后它看起来像评论阅读urlmon.dll可能支持所有你想要隐含的文件类型,这将消除需要检查它不是一个可执行文件或类似这种事情,但你需要确认DOC / DOCX / XSL / XSLX做回一个有效的MIME类型。



Answer 2:

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

即使有一个设置,因为这将基于从客户端接收的内容类型头,这是相当错误的,将是无用的反正。

在代码中,你当然可以看一下Content-Type头,但如果你想验证上传的数据是一种特定类型的,你将不得不手动执行的基础上,什么样的数据,你期待。 对于图片,这很容易。 对于其他类型的文件,它可以是一个困难得多。



Answer 3:

数据Anotations是你在找什么,这里是一个搜索,可以帮助您, 谷歌数据anotaions

更新

我认为它验证过的文件扩展名。 如果不wan't依赖于file extensions ,我认为最好的方法是验证过的MIME类型 。 这是更复杂的,并从每个浏览器而变化,并且可以伪造(尽管这比伪造的扩展更加复杂。)

一个简单而不能自由选择是使用Telerik的RadAsyncUpload 。

你可以自己写代码(虽然我从来没有与它弄乱) 这可以让你开始。 (这篇文章涉及的事实,你不能可靠地检测MIME类型没有IIS,但它应该让你对你的方式。)

希望这将让你去。 如你所知,你可以通过它们的大小限制的文件,通过其扩展验证,如果按MIME类型添加验证我想你已经做了所有你能。 我想这是你所能做的是安全,而不是排除有效文件; 虽然我听说散列文件,以及一些其他的选项; 但这些最挑衅排除合法的文件。

此外,正如我所说,MIME类型可以是假货,并发送至您的服务器,是额外的安全,你应该确认双方的客户端和服务器端。



文章来源: How to restrict/validate file upload filetypes server side on IIS