2012-04-22 92 views
1

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

回答

2

我建议使用Path.GetInvalidFileNameChars

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

..之前和/或通过一个或\/,这两者都包括在由GetInvalidFileNameChars返回的数组中成功时是典型地仅危险。就其本身而言,..是无害的(除非你专门解决目录路径),你不应该禁止它,因为人们可能希望在他们的文件名(如The A...Z of Programming.pdf)引进椭圆。

2

如果不同的用户保存一个文件具有相同的名称?你是否为每个用户创建一个文件夹?

最有可能的,你应该做的是保存他们在一个数据库记录,其中还包含一个指向实际文件(使用你生成一个文件名,也许是一个GUID)提供的名称是什么。如果您想将文档保存在数据库中,也可以考虑使用文件流数据类型。

不会有好结果可能来自让您的用户确定服务器:)

+0

上的文件名。如果有可能与我已经选择该sollution数据库工作。现在过滤是我的第二好选择。 – Patrick 2012-04-22 08:46:44