私のアプリケーションでは、ユーザーがファイルをアップロードまたはダウンロードするときに静的文字列を作成します。その文字列では、ファイル名はその文字列のフロントエンドから渡されます。このようにして、ユーザーは.. \ .. \ another file.fileのようなことを実行して、他のユーザーからデータを改ざんして取得することができます。そのため、これを防ぐために取得したファイル名をフィルタリングする必要があります。改ざんを防ぐためにフィルタリングする必要のある文字は何ですか?これで、二重のドットと前後のスラッシュができました。他に考慮すべきことはありますか?C#でこれを行うための標準的な方法はありますか?
質問する
220 次
2 に答える
2
私は使用することをお勧めしPath.GetInvalidFileNameChars
ます:
public static bool IsValidFileName(string fileName)
{
return fileName.IndexOfAny(Path.GetInvalidFileNameChars()) == -1;
}
..
通常、危険なのは、の前後にa\
または/
、が付いている場合のみです。これらは両方とも、によって返される配列に含まれていGetInvalidFileNameChars
ます。それ自体..
は無害であり(特にディレクトリパスを解決している場合を除きます)、ファイル名に省略記号を導入したい場合があるため、禁止しないでください(例The A...Z of Programming.pdf
)。
于 2012-04-22T08:35:23.317 に答える
2
別のユーザーが同じ名前のファイルを保存した場合はどうなりますか?ユーザーごとにフォルダーを作成していますか?
おそらくあなたがすべきことは、彼らが提供する名前をデータベースレコードに保存することです。データベースレコードには、実際のファイルへのポインタも含まれています(生成したファイル名、おそらくGUIDを使用します)。ドキュメントをデータベースに保存する場合は、ファイルストリームデータ型の使用を検討することもできます。
ユーザーにサーバー上のファイル名を決定させることからは、良いことは何も得られません:)
于 2012-04-22T08:44:12.430 に答える