如何确保附件文件名不会导致问题?

时间:2016-10-25 14:41:34

标签: javascript c# asp.net

我正在使用ASP.NET MVC网站,用户应该能够上传图像和PDF文档,并在以后查看它们。我注意到某些文件名导致附件无法显示。

我使用Dropzone.js来提供拖放字段。使用HttpPostedFileBase通过控制器方法保存文件。当用户打开库视图时,相应的控制器方法会在ViewBag条目中列出所有先前上载的文件(文件名)。然后视图为每个图像创建一个缩略图:

foreach (var path in (IEnumerable<string>)ViewBag.Attachments){
    ...
    <img class="attachments-thumbnail" style="cursor: pointer" src="@Url.Content(path)" alt="" />
    ...
}

现在,当我上传文件名为h &.jpg的图片时,缩略图不会显示。在Firefox中,控制台显示错误X GET http://localhost:54305/Content/Images/Attachments/1/h%20&.jpg。因此,它正在寻找h%20&.jpg而不是h &.jpg,即使该文件已按照预期h &.jpg保存到服务器。

另一方面,当我上传名称为radio%2E11%2E3%2E1852937.pdf的pdf时,会再次使用其原始文件名保存,但这次错误出现了:X GET XHR http://localhost:54305/Content/Images/Attachments/1/radio.11.3.1852937.pdf

我不确定这是怎么回事。当我使用检查器工具时,缩略图<img>标记指向正确的文件名,即服务器上存在的文件名。我想这必须是一个非常频繁的用例,那么是否有任何C#方法可以使文件名对Web使用安全,或者我是否必须自己重命名文件?理想情况下,我当然希望至少保留pdf的文件名,就像用户选择它们一样,因为它们可能表示文件内容,但似乎不安全。

0 个答案:

没有答案