[ASP.NET]Path Manipulation(Input Validation and Representation, Data flow) (II)

針對 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:從零開始的軟體開發生活

請大家繼續支持 ^_^