3

だから私はasp.netのセキュリティに関する本を読んでいます。そこにあったセクションの1つは、ディレクトリトラバーサルファイル名(ハッキングされたファイル名)を防ぐ方法です。

コード行は次のとおりです。

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

を使用して、仮想パス (つまり、Web サイト内のパス) を物理パス ( ...など)Server.MapPathに変換する必要があります。D:\InetPub\

だからあなたはこれを行うことができます:

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

その後physicalPath、実際にファイルにアクセスするために使用できます。

ところで、上記のファイル名のチルダは、コードが実行されている Web サイトのルートを表しています。

于 2012-11-06T08:30:22.557 に答える