下载/上传文件,过滤哪些字符c#

时间:2012-04-22 08:24:44

标签: c# asp.net-mvc-3 file filtering

在我的应用程序中,我在用户上传或下载文件时构建一个静态字符串。在该字符串中,文件名从该字符串的前端传递。通过这种方式,用户可以执行诸如.. \ .. \ another file.file之类的操作来篡改并从其他用户获取数据。因此,我需要过滤我得到的文件名以防止这种情况发生。需要过滤哪些字符以防止篡改?我现在有双点和后退和正斜杠。还有什么我应该考虑的吗?在C#中可能有一种标准的方法吗?

2 个答案:

答案 0 :(得分:2)

我建议使用Path.GetInvalidFileNameChars

public static bool IsValidFileName(string fileName)
{
    return fileName.IndexOfAny(Path.GetInvalidFileNameChars()) == -1;
}

..通常只有在\/之前和/或之后才会发生危险,这两者都包含在GetInvalidFileNameChars返回的数组中。单独..是无害的(除非你专门解析目录路径),你不应该禁止它,因为人们可能想在其文件名中引入省略号(例如The A...Z of Programming.pdf)。

答案 1 :(得分:2)

如果不同的用户保存具有相同名称的文件,该怎么办?您是否为每个用户创建了一个文件夹?

您应该做的最有可能的事情是将它们提供的名称存储在数据库记录中,该记录还包含指向实际文件的指针(使用您生成的文件名,可能是guid)。如果您还想将文档保存在数据库中,也可以考虑使用文件流数据类型。

让用户确定服务器上的文件名是不会有任何好处的。)