針對 Path Manipulation(Input Validation and Representation, Data flow) 的問題,
可以提供一個 GetValidateFileName Method (透過DirectoryInfo來Filter檔名),來取得合法的檔案名稱。
然後再針對這個Method回傳的檔案進行操作。
在前一篇「Path Manipulation(Input Validation and Representation, Data flow)」,我們將 Delete 及 Copy 包裝在 Method 之中。
主要都是去Lookup確定的路徑中的檔案,所以亂馬客覺得還可以提供一個 GetValidateFileName Method (透過DirectoryInfo來Filter檔名),來取得合法的檔案名稱。
之後再針對這個Method回傳的檔案進行操作,如下,
private string GetValidateFileName(string folderPath, string fileName)
{
//http://stackoverflow.com/questions/4732967/how-to-fix-path-manipulation-issue-from-fortify-scan-report-for-tthe-following
string result = string.Empty;
DirectoryInfo di = new DirectoryInfo(folderPath);
FileInfo[] files = di.GetFiles(fileName);
if (files.Any())
{
result = files[0].FullName;
}
return result;
}
所以之前的Delete及Copy可以利用上面 GetValidateFileName Method的回傳檔名再操作,如下,
//刪除某個檔案
protected void Button1_Click(object sender, EventArgs e)
{
//假如我們的Web AP下有Data目錄
string dataFolderPath = Server.MapPath(@"~\Data\");
string fileName = GetValidateFileName(dataFolderPath, txtFileName.Text);
if (!string.IsNullOrWhiteSpace(fileName))
{
File.Delete(fileName);
}
}
//從temp目錄中Copy某個檔案到Data目錄之中
protected void Button3_Click(object sender, EventArgs e)
{
//假如我們的Web AP下有Temp的目錄
string tempFolderPath = Server.MapPath(@"~\temp\");
string fileName = txtFileName.Text;
string tempFileFullPath = GetValidateFileName(tempFolderPath, fileName);
if (!string.IsNullOrWhiteSpace(tempFileFullPath))
{
string dataFileName = Path.GetFileName(tempFileFullPath);
//假如我們的Web AP下有Data目錄
string dataFolderPath = Server.MapPath(@"~\Data\");
string dataFileFullPath = Path.Combine(dataFolderPath, dataFileName);
//把temp目錄下的檔案,Copy到Data目錄下
File.Copy(tempFileFullPath, dataFileFullPath, true);
}
}
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^