2

私が取り組んでいるファイル アップロード機能では、ユーザーがアップロードした画像を保存できるパスが重要な問題の 1 つです。次のコードでは、アップロードされたファイルを保存するために、Web ベースのアプリケーション フォルダー内のフォルダーを既に指定しています。私のインストラクターは、asp.net UploadFile コントロールのコード ビハインドにある次の行にセキュリティ ホールがまだあると言いましたが、その理由はわかりません!!!

string path = @"~\Images\"; 
string comPath = Server.MapPath(path + "\\" + FileUpload1.FileName);

この種のセキュリティ ホールを防止する方法を教えてください。

アップデート:

この種のセキュリティホールを回避する方法を誰か教えてもらえますか? 私はまだ、これら 2 つの回線を安全にする方法を見つけようとしています。

4

2 に答える 2

1

私のインストラクターは、asp.net UploadFile コントロールのコード ビハインドにある次の行にセキュリティ ホールがまだあると言いましたが、その理由はわかりません!!!

..\..\foo.jpgクライアントがファイル名のようなものを送信するとどうなるか想像してみてください。

于 2013-03-20T12:38:02.947 に答える
0

かなり簡単な修正方法は、ファイル名に\または/文字が含まれていないことを確認することです。最初のそのような文字まですべてを取り除きます。(ブラウザによってアップロード ファイル名の扱いが異なるため、これは良い考えです。完全なパスを送信するものもあれば、単純なファイル名だけを送信するものもあれば、代わりに偽のパスを送信するものさえあります。)

これを行う簡単な方法は、正規表現を使用することです。

string fileName = Regex.Replace( FileUpload1.FileName, @"(?s)^.*[\\/]", "" );

OS やファイル システムによっては、問題を引き起こす可能性のある他の文字もあることに注意してください。一般に、最も安全なオプションは、次のように、安全であることがわかっている文字以外のすべての文字を削除することです。

string safeFileName = Regex.Replace( fileName, @"[^A-Za-z0-9\-._() ]", "" );

ファイル名の拡張子が、ファイルに期待されるタイプと一致することをさらに確認することもできます。

于 2013-03-24T19:02:39.100 に答える