CAT.NET「ファイル システム ルーチンに渡す前にファイル パスをサニタイズしてください」メッセージ
-
22-09-2019 - |
質問
CAT.NET コード分析を使用してコード (C#、デスクトップ アプリケーション) を分析しているのですが、ファイル名を処理するときに「ファイル システム ルーチンに渡す前にファイル パスをサニタイズしてください」というメッセージが表示されます。私が理解できないのは、ファイル名が有効であることを確認するために次のように使用することです。
void SomeMethod(String filename)
{
filename = System.IO.Path.GetFullPath(filename);
// ... Do stuff
}
無効なファイル名の問題を解決する「魔法の解決策」ではないでしょうか?似たようなことを読んだことがある ここ (最初の答え)しかし、私の場合、私はローカルファイルのみを扱っています、まあ、非常に基本的なものなので...
では、なぜこのメッセージが表示されるのでしょうか?また、表示を回避するにはどうすればよいでしょうか?
解決
これが古い質問であることは承知していますが、特に CAT.Net エラー メッセージに関連する役立つかもしれないものを見つけました。
で ブログ投稿 CAT.Net データ フロー ルールについて、彼らは次のように述べています。 FileCanonicalizationRule
:
説明
ファイル処理ルーチンで使用されるユーザー入力は、以下の可能性がある。 ファイルの正規化の脆弱性。コードは特に影響を受けやすい という名前に基づいて何らかの決定を下すと、正規化の問題が発生する。 入力としてプログラムに渡されるリソースのこと。ファイル、パス とURLは、正規化の影響を受けやすいリソース・タイプである。 というのも、それぞれの場合において、以下のようなさまざまな表現方法があるからだ。 同名である。
解決
ファイル処理ルーチンに渡す前に、ファイル パスをサニタイズします。path.getinvalidfilenamecharsまたはpath.getinvalidpathcharsを使用して、無効な文字を取得し、入力から削除します。詳細はにあります http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidfilenamechars.aspx.
したがって、彼らはあなたが使うことを提案します Path.GetInvalidFileNameChars
そして Path.GetInvalidPathChars
パスを検証します。
彼らの提案は次のとおりであることに注意してください。 取り除く 無効な文字。これによりパスは確かに有効になりますが、ユーザーに予期しない動作が発生する可能性があります。のコメントのように、 これ 質問と回答によると、入力で予期しないこと (不正な文字を削除したり、修正されたバージョンを使用したりするなど) を行うよりも、早めに終了してパスが無効であることをユーザーに伝える方がよいと考えられます。
他のヒント
、それは「../../../../etc/passwd」のようなものかもしれません「トンGETディレクトリにそれがないはずです。