如何保护控制器不从用户输入访问父目录和根目录

时间:2013-03-10 06:03:38

标签: c# asp.net-mvc controller security

我有一个ASP.Net MVC控制器操作,旨在访问我的App_Data文件夹中选定目录和子目录中的特定文件。

有人会告诉我如何将其锁定,以便用户无法访问根目录或父目录,只能访问目录和子目录中的文件吗?

这是控制器操作的不安全版本:

public string GetFile(string fileName)
{
    string dataDir = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();
    string specialFiles = "SpecialFiles";

    string finalPath = Path.Combine(dataDir, specialFiles, fileName);
    string text = System.IO.File.ReadAllText(finalPath);
    return text;
}

天真的解决方案是检查fileName是否有..\等字符串组合,然后抛出异常或其他内容。虽然我可以实现这个解决方案,但如果存在最佳实践,我宁愿遵循最佳实践。

1 个答案:

答案 0 :(得分:1)

在将字符串组合到finalPath之前,从fileName中提取FileName,如下所示:

fileName = System.IO.Path.GetFileName(fileName)