所以我正在读一本关于asp.net安全性的书。其中一个部分是:如何防止目录遍历文件名(黑客文件名)。
所以代码行是:
string fullPath = Server.MapPath(System.IO.Path.Combine(@"d:\inetpub\inbound\",filename));
但是,我注意到了合并的结果,这将是:
d:\inetpub\inbound\myfile.txt但是我记得参数类型应该是虚拟路径,而不是文件系统路径!

d:\inetpub\inbound\myfile.txt不是虚拟路径!
我错过了什么?

附注:这本书是:(wrox)

发布于 2012-11-06 08:40:11
代码示例是错误的。
Server.MapPath的作用确实是将虚拟路径转换为物理路径。如果你已经有一条物理路径,那就不需要Server.MapPath了。
代码可能会抛出一个异常,其中包含以下消息:
“d:\inetpub\inbound\myfile.txt”是一条物理路径,但需要一个虚拟路径。
发布于 2012-11-06 08:30:22
您必须使用Server.MapPath将虚拟路径(即网站内的路径)转换为物理路径(例如D:\InetPub\.)。
所以你可以这么做:
var physicalPath = Server.MapPath("~/Incoming/Receivedfile.txt");然后您可以使用physicalPath实际访问该文件。
顺便说一句,上面文件名中的倾斜表示代码正在运行的网站的根。
https://stackoverflow.com/questions/13247123
复制相似问题