阻止访问文件以保护基于路径的下载

时间:2016-04-05 14:17:08

标签: asp.net security download

允许用户通过在URL

中添加一些路径修改器来下载文件是相当常见的
order by left(d.drugname, 1), rand()

引自http://hugoware.net/blog/dude-for-real-encrypt-your-web-config

我正在使用的应用程序在整个应用程序中散布了自由路径下载(基于目录),因此它非常容易受到“http://localhost:1100/Home/GetFile?name=../web.config”或(..%2fweb.config)

是否有一种简单的方法来限制对配置文件的访问 - 我是否需要提供带有白名单目录的自定义Server.MapPath - 或者是否有更好的方法。 如何确保文件下载安全 - 基于路径的下载本质上是不安全的?

1 个答案:

答案 0 :(得分:1)

一个简单的选项,假设〜/ Content目录中的所有文件可以安全下载,将验证该路径实际上是 (或)〜/ Content目录而不是向上,如〜/ Content /../ web.config那样。我可能会这样做:

// MVC Action to download the correct file From our Content directory
public ActionResult GetFile(string name) {
    // Safe path
    var safePath = this.Server.MapPath("~/Content");

    // Requested path
    string path = this.Server.MapPath("~/Content/" + name);

    // Make sure requested path is safe
    if (!path.StartsWith(safePath))
        // NOT SAFE! Do something here, like show an error message

    // Read file and return it
    byte[] file = System.IO.File.ReadAllBytes(path);
    return this.File(file, "html/text");            

}