Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 下载/上传文件,过滤哪些字符c_C#_Asp.net Mvc 3_File_Filtering - Fatal编程技术网

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

C# 下载/上传文件,过滤哪些字符c,c#,asp.net-mvc-3,file,filtering,C#,Asp.net Mvc 3,File,Filtering,在我的应用程序中,当用户上载或下载文件时,我构建一个静态字符串。在该字符串中,文件名从该字符串的前端传递。通过这种方式,用户可以执行诸如…\ \另一个file.file之类的操作来篡改并从其他用户处获取数据。因此,我需要过滤我得到的文件名以防止出现这种情况。需要过滤哪些字符以防止篡改?我现在有了双点和前后斜线。还有什么我应该考虑的吗?在C语言中是否有一种标准的方法可以做到这一点?我建议使用: 。。通常只有在前面和/或后面有\或/(这两者都包含在GetInvalidFileNameChars返回的

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

我建议使用:

。。通常只有在前面和/或后面有\或/(这两者都包含在GetInvalidFileNameChars返回的数组中)时才是危险的。就其本身而言。。除非您专门解析目录路径,否则它是无害的,您不应该禁止它,因为人们可能希望在其文件名中引入省略号,例如Programming.pdf的A…Z。

我建议使用:


。。通常只有在前面和/或后面有\或/(这两者都包含在GetInvalidFileNameChars返回的数组中)时才是危险的。就其本身而言。。除非您专门解析目录路径,否则它是无害的,您不应该禁止它,因为人们可能希望在其文件名中引入省略号,例如Programming.pdf的A…Z。

如果不同的用户使用相同的名称保存一个文件怎么办?您是否正在为每个用户创建文件夹

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


让您的用户确定服务器上的文件名不会带来任何好处:

如果不同的用户使用相同的名称保存一个文件怎么办?您是否正在为每个用户创建文件夹

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


让用户确定服务器上的文件名不会带来任何好处:

如果可以使用数据库,我会选择该解决方案。目前,过滤是我的第二个最佳选择。如果有可能使用数据库,我会选择该解决方案。目前,过滤是我的第二个最佳选择。
public static bool IsValidFileName(string fileName)
{
    return fileName.IndexOfAny(Path.GetInvalidFileNameChars()) == -1;
}