我想有文件类型是用户有权上传到我的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,等真的是它们是什么?
既然你是想服务器端,您可以使用这些文件的MIME类型。
此职位显示了如何确定基于文件内容(而不是通过扩展名)的MIME类型。
如果你想限制输入到特定的文件扩展名,你可以简单地核对要接受什么样的输入名称。 如果通过,你可以做一个对外部参照在后我联系,以确保用户不只是改变你的文件扩展名的库。
这样做将提供一个很好的度的把握,该文件是要接受一个!
编辑:根据到目前为止....对你说你正在寻找此方法应该很好地为你工作基于评论。 我的建议是,如果你只是想限制它在你的意见之一所列类型的文件...请在文件扩展名进行简单的检查。 如果是有效的,那么该文件传递到urlmon.dll
的链接中列出。 请确保它不回来作为无效型....又名可执行/ JAVA / ZIP /等。 如果它不是一个无效的类型,那么你将有一个非常高度的肯定,这是一个安全的文件!
最后,通过对后它看起来像评论阅读urlmon.dll
可能支持所有你想要隐含的文件类型,这将消除需要检查它不是一个可执行文件或类似这种事情,但你需要确认DOC / DOCX / XSL / XSLX做回一个有效的MIME类型。
没有,没有web.config中设置来限制哪些被上传。 验证上传数据的唯一可能的方法是实际验证的代码数据。
即使有一个设置,因为这将基于从客户端接收的内容类型头,这是相当错误的,将是无用的反正。
在代码中,你当然可以看一下Content-Type头,但如果你想验证上传的数据是一种特定类型的,你将不得不手动执行的基础上,什么样的数据,你期待。 对于图片,这很容易。 对于其他类型的文件,它可以是一个困难得多。
数据Anotations是你在找什么,这里是一个搜索,可以帮助您, 谷歌数据anotaions
更新
我认为它验证过的文件扩展名。 如果不wan't依赖于file extensions
,我认为最好的方法是验证过的MIME类型 。 这是更复杂的,并从每个浏览器而变化,并且可以伪造(尽管这比伪造的扩展更加复杂。)
一个简单而不能自由选择是使用Telerik的RadAsyncUpload 。
你可以自己写代码(虽然我从来没有与它弄乱) 这可以让你开始。 (这篇文章涉及的事实,你不能可靠地检测MIME类型没有IIS,但它应该让你对你的方式。)
希望这将让你去。 如你所知,你可以通过它们的大小限制的文件,通过其扩展验证,如果按MIME类型添加验证我想你已经做了所有你能。 我想这是你所能做的是安全,而不是排除有效文件; 虽然我听说散列文件,以及一些其他的选项; 但这些最挑衅排除合法的文件。
此外,正如我所说,MIME类型可以是假货,并发送至您的服务器,是额外的安全,你应该确认双方的客户端和服务器端。