所以我正在读一本关于asp.net安全性的书。其中一个部分是: 如何防止目录遍历文件名(黑客文件名)。
所以代码行是:
string fullPath = Server.MapPath(System.IO.Path.Combine(@"d:\inetpub\inbound\",filename));
然后我注意到联合收割机的结果将是:
d:\inetpub\inbound\myfile.txt
但我记得参数类型应该是虚拟路径而不是文件系统路径!
d:\inetpub\inbound\myfile.txt
不是虚拟路径!
我错过了什么?
P.S。这是书:( wrox)
答案 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上面文件名中的波浪号代表运行代码的网站的根目录。