2012-04-22 98 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