3

所以我正在阅读一本关于 asp.net 安全性的书。其中一节是:如何防止目录遍历文件名(被黑的文件名)。

所以代码行是:

string fullPath = Server.MapPath(System.IO.Path.Combine(@"d:\inetpub\inbound\",filename));

但后来我注意到合并的结果将是:

d:\inetpub\inbound\myfile.txt

但我记得参数类型应该是虚拟路径而不是文件系统路径!

在此处输入图像描述

d:\inetpub\inbound\myfile.txt不是虚拟路径!

我错过了什么?

在此处输入图像描述

ps这是书:(wrox)

在此处输入图像描述

4

2 回答 2

2

代码示例是错误的。

的作用Server.MapPath确实是将虚拟路径转换为物理路径。如果您已经有物理路径,则无需Server.MapPath.

该代码可能会抛出一个带有消息的异常:

'd:\inetpub\inbound\myfile.txt' 是物理路径,但应该是虚拟路径。

于 2012-11-06T08:40:11.187 回答
1

您必须使用Server.MapPath虚拟路径(即网站内部的路径)转换为物理路径(例如D:\InetPub\...)。

所以你可以这样做:

var physicalPath = Server.MapPath("~/Incoming/Receivedfile.txt");

然后您可以使用physicalPath实际访问该文件。

顺便说一句,上面文件名中的波浪号代表运行代码的网站的根目录。

于 2012-11-06T08:30:22.557 回答