是的,它很脆弱。
只是爲了證明這一點,我成立了一個新的MVC項目名爲WebApplication1.sln
以下請求下載解決方案文件:
http://localhost:56548/Home/Download?fileName=../../WebApplication1.sln
你可以寫一個天真的檢查:
private static readonly char[] InvalidFilenameChars = Path.GetInvalidFileNameChars();
public ActionResult Download(string fileName)
{
if (fileName.IndexOfAny(InvalidFilenameChars) >= 0)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
var rootPath = Server.MapPath("~/ClientDocument/");
byte[] fileBytes = System.IO.File.ReadAllBytes(Path.Combine(rootPath, fileName));
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
這將檢查參數fileName
是否是有效的文件名。此不包括目錄分隔符字符,因此它們不能將路徑作爲文件名傳遞。
但是,唯一的方法是完全安全,是限制您的應用程序擁有的權限。只授予它對你的虛擬目錄的權限,沒有別的。
來源
2016-05-23 06:26:45
Rob
'filename'從哪裏來? –
文件名來自查詢字符串 –