3

ファイルをサーバーに保存する次のコードがあります。

function void StoreFile(string inputFileName) {
   ...

   var extension = Path.GetExtension(inputFileName);
   if(extension == ".csv") {
       var fileName = string.Format("{0}_{1}{2}", Session.SessionID, new Guid(), extension);

       var dataFileServerPath = _documentService.getPath(fileName, UserProfile.UserName, UserProfile.SourceID);

       if(!string.IsNullOrEmpty(dataFileServerPath)) {
           try {
              using(FileStream dataFile = new FileStream(dataFileServerPath, FileMode.Create))  { .... }
           }
           cathc(Exception e) { ... }    
       }
    }    
    else {
        throw new NotSupportedFormatError();
    }
}

Veracodeを分析した後、オンラインでディレクトリトラバースの問題が発生しますFileStream dataFile = new FileStream(dataFileServerPath, FileMode.Create)

この問題が発生するのはなぜですか。ファイル拡張子が自分のケースで有効かどうかを確認し、その値を fileName に渡しました。これはセキュリティ上の問題ですか? また、この問題を解決するにはどうすればよいですか?

_documentService.getPath特定のユーザーのweb.configとファイル名からのパスを追加するだけで、ユーザー入力とは関係ありません。

4

2 に答える 2

5

ここに投稿したコードによると、それは誤検知のようです。

Veracode は明らかにinputFileName変数を追跡しており (検証されていないユーザー入力が含まれていると思います)、それが変数に影響を与えていることに注意してextensionください。後でextensionファイル名に直接埋め込み、ポイントするファイルを読み取るため、Veracode は、悪意のあるユーザーが inputFileName に部分パスを埋め込み、ターゲット ファイルのディレクトリを変更する可能性があることを認識しています...

この場合、Veracode は、入力の検証 (チェック) を既に実行したという事実を見逃しておりextension == ".csv"、入力の関連部分を厳密なホワイトリストに完全に制限しています。

質問に関連するコードが他に欠落していないと仮定すると、これは誤検知としてマークしても安全です。

于 2015-08-25T13:21:59.480 に答える
4

実際にユーザー入力を使用していないことを静的アナライザーが確実に検証する方法はありません。彼らは過度に用心深くなる傾向があり、それによって偽陽性の警告が生成されます。

于 2015-08-25T13:22:46.907 に答える