我希望有一个白名单的文件类型,用户被授权上传到我的IIS服务器(即时通讯使用IISv7.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>在webconfig中是否有一个选项可以设置允许的文件类型的白名单?或者,当文件完全上传时,唯一的选择是在代码中验证文件类型吗?推荐的工艺是什么?我如何才能确定.docx、.pdf、.jpg等都是真实存在的?
发布于 2012-08-18 13:55:51
因为你想要服务器端,你可以使用文件的mime类型。
THIS post展示了如何根据文件内容(而不是扩展名)确定MIME类型。
如果您确实希望将输入限制为特定的文件扩展名,则只需根据您希望接受的名称检查输入名称即可。如果通过,您可以对我链接的文章中的库执行xref,以确保用户没有更改您的文件扩展名。
这样做可以很好地确定文件是您想要接受的文件!
编辑:基于目前为止的评论...根据你所说的,你正在寻找的这个方法对你来说应该是非常好的。我的建议是,如果你只是想把它限制在你的评论中列出的文件类型……对文件扩展名做一个简单的检查。如果这是有效的,则将文件传递给链接中列出的urlmon.dll。确保它不会返回为无效的压缩可执行文件/ type....aka /zip/等。如果它不是无效类型,那么您将高度确定它是一个安全文件!
最后,通读那篇文章的评论,看起来urlmon.dll可能会隐式支持你想要的所有文件类型,这将消除检查它不是可执行文件或类似性质的东西的需要,但你需要确认doc/docx/xsl/xslx确实返回了有效的mime类型。
发布于 2012-08-18 10:15:16
不,没有web.config设置来限制上传的内容。验证上传数据的唯一可能方法是实际验证代码中的数据。
即使有一个设置,它也是无用的,因为它将基于从客户端接收的Content-Type头,这可能是非常错误的。
在代码中,您当然可以查看Content-Type头,但如果您试图验证上传的数据是特定类型的数据,则必须根据您期望的数据类型手动执行此操作。对于图像来说,这很容易。对于其他文件类型,这可能要困难得多。
发布于 2012-08-11 02:16:29
数据注释就是你要找的,这里有一个可能对你有帮助的搜索,google data anotaions
更新
我认为它验证了文件扩展名。如果你不想依赖file extensions,我认为你最好的选择就是验证MIME types。这更加复杂,并且因浏览器而异,并且可以被伪造(尽管这比伪造扩展更复杂)。
一个简单但不是免费的选择是使用Telerik RadAsyncUpload。
您可以自己编写这段代码(尽管我从未尝试过) this可能会帮助您入门。(这篇文章讨论了这样一个事实,即如果没有IIS,你就不能可靠地检测mime类型,但它应该会让你上路。)
希望这能让你振作起来。正如你所知道的,你可以通过文件的大小来限制文件,通过扩展名来验证文件,如果你添加了MIME类型的验证,我想你已经做了所有你能做的。我认为这就是为了安全和不排除有效文件所能做的一切;虽然我听说过对文件进行哈希处理和其他一些选项,但这些选项将最挑衅地排除合法文件。
此外,正如我所提到的,MIME类型可以是假的,并发送到您的服务器,为了额外的安全,您应该在客户端和服务器端进行验证。
https://stackoverflow.com/questions/11905561
复制相似问题