我有一个显示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?
由于
答案 0 :(得分:1)
这是事实,因为你要求它这样做。
使用查询参数传递直接文件名是个坏主意。
您当然可以创建指向您正在使用的文件的直接路径,而不是此相对路径:
string absolutePath = Path.Combine(@"C:\yourRootFolder", strFilePath);
Response.WriteFile(absolutePath);
但如上所述,我警告您存在安全风险!您必须授予IIS应用程序池用户访问此处指定的文件夹的权限。传递类似以下内容的文件很容易被劫持:
..\..\..\Windows\anysecurefile.txt