允许用户通过在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 - 或者是否有更好的方法。 如何确保文件下载安全 - 基于路径的下载本质上是不安全的?
答案 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");
}