Response.WriteFile添加目录路径,它不应该

时间:2014-05-19 11:22:16

标签: asp.net visual-studio-2010 c#-4.0

我有一个显示PDF文件的网页,其中包含以下代码:

Response.Clear();
strFilePath = Server.HtmlDecode(Request.QueryString["filename"]);
Response.ContentType = "application/pdf";
Response.WriteFile(strFilePath);

从Server.HtmlDecode()获取的文件名是“\ FileServer \ shared \ faxqueue \ fax.pdf”

但是,对于找不到的目录会抛出异常,并且说它无法找到该文件。它还说它正在寻找:“C:[网站根文件夹] \ FileServer \ shared \ faxqueue \ fax.pdf”

这意味着它已将文件名附加到网站代码所在的文件夹中。

如何阻止它使用网站root?

由于

1 个答案:

答案 0 :(得分:1)

这是事实,因为你要求它这样做。

使用查询参数传递直接文件名是个坏主意。

您当然可以创建指向您正在使用的文件的直接路径,而不是此相对路径:

string absolutePath = Path.Combine(@"C:\yourRootFolder", strFilePath);
Response.WriteFile(absolutePath);

但如上所述,我警告您存在安全风险!您必须授予IIS应用程序池用户访问此处指定的文件夹的权限。传递类似以下内容的文件很容易被劫持:

..\..\..\Windows\anysecurefile.txt