私はexeファイルがサーバーにアップロードされないようにするための良い解決策を探しています。asp.net mvcのexeファイルのアップロードを防ぐ方法
アップロードを破棄できるのは、ファイル全体がアップロードされるのを待つのではなく、受け取った直後にファイルヘッダーを読み取るだけです。
私はすでに拡張チェックを実装しており、より良い解決策を探しています。
私はexeファイルがサーバーにアップロードされないようにするための良い解決策を探しています。asp.net mvcのexeファイルのアップロードを防ぐ方法
アップロードを破棄できるのは、ファイル全体がアップロードされるのを待つのではなく、受け取った直後にファイルヘッダーを読み取るだけです。
私はすでに拡張チェックを実装しており、より良い解決策を探しています。
howとwhen/where部分があります。バイナリファイルにはヘッダーが含まれていてヘッダーは簡単に取り出して確認するのが簡単です。 Windowsファイルの場合は、Executable-File Header Formatの記事をチェックできます。他のバイナリタイプでも同様のフォーマットが使用されるため、許可するタイプとそうでないタイプを判別できます。
注:リンクされた記事は、ファイルの完全なクエリです。あなたが数バイトしか調べていない安価で、ダウンして、汚れたショートカットがあります。
when/whereはファイルの取得方法によって異なります。高度に抽象化された方法論(アップロードライブラリ)を使用している場合、これはかなり正常です。ファイル全体をストリーミングしてから、ビットのクエリを開始する必要があります。それがメモリにストリーミングされているか、保存して削除する必要があるかどうかは、コーディング、場合によってはライブラリによって異なります。ストリーミングを制御すると、最初のバイト(ヘッダー部分)をストリームし、途中でプロセスを中止することができます。
データを送信する前にファイルが.exeで終わるかどうかを確認し、チェックサーバー側でも確認できます。
アップロードされたデータへの最初のアクセスポイントは、HttpModule内にあります。 手元に.exeがあり、アップロードをキャンセルした場合、技術的にすべてのバイトが送信される前に確認できます。それはあなたがこれを取ることを望むところによってはかなり複雑になることがあります。
あなたはBrettleのNeatUploadのHttpModuleを見ることをお勧めします。たぶんそれはあなたが望むレベルでこれに対処する方法のリードを与える。
ファイルヘッダーは偽造できます。アップロードされたデータの最初の2バイトをチェックしてください。もし 'MZ'ならば、実行可能ファイルがあります。 –
重複:http://stackoverflow.com/questions/3635128/validate-file-type-extension – Matthieu