Server.MapPath问题?

时间:2012-11-06 08:27:04

标签: c# asp.net .net .net-4.0 server.mappath

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

所以代码行是:

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

然后我注意到联合收割机的结果将是:

d:\inetpub\inbound\myfile.txt

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

enter image description here

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

我错过了什么?

enter image description here

P.S。这是书:( wrox)

enter image description here

2 个答案:

答案 0 :(得分:2)

代码示例错误。

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

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

  

'd:\ inetpub \ inbound \ myfile.txt'是物理路径,但预计会有虚拟路径。

答案 1 :(得分:1)

您必须使用Server.MapPath虚拟路径(即网站内的路径)转换为物理路径(例如{{1} } ...)。

所以你可以这样做:

D:\InetPub\

然后您可以使用var physicalPath = Server.MapPath("~/Incoming/Receivedfile.txt"); 实际访问该文件。

BTW上面文件名中的波浪号代表运行代码的网站的根目录。