下载/上传文件,要过滤哪些字符 c#
本文关键字:过滤 字符 文件 下载 | 更新日期: 2023-09-27 18:31:50
在我的应用程序中,当用户上传或下载文件时,我会构建一个静态字符串。在该字符串中,文件名从该字符串中的前端传递。通过这种方式,用户可以做类似..''..''other file.file 用于篡改和获取其他用户的数据。因此,我需要过滤我得到的文件名以防止这种情况。需要过滤哪些字符以防止篡改?我现在有双点和前后斜杠。还有什么我应该考虑的吗?在 C# 中是否有一种标准方法可以做到这一点?
我建议使用Path.GetInvalidFileNameChars
:
public static bool IsValidFileName(string fileName)
{
return fileName.IndexOfAny(Path.GetInvalidFileNameChars()) == -1;
}
..
通常只有在前面和/或后面有'
或/
时才是危险的,这两者都包含在GetInvalidFileNameChars
返回的数组中。就其本身而言,..
是无害的(除非您专门解析目录路径),并且您不应该禁止它,因为人们可能希望在他们的文件名中引入省略号(例如 The A...Z of Programming.pdf
)。
如果不同的用户保存同名的文件怎么办? 是否要为每个用户创建一个文件夹?
最有可能的是,您应该做的是将它们提供的名称存储在数据库记录中,该记录还包含指向实际文件的指针(该文件使用您生成的文件名,可能是 guid)。 如果您还想将文档保存在数据库中,也可以考虑使用文件流数据类型。
让用户确定服务器上的文件名不会带来任何好处:)