2016-04-27 12 views
1

ファイルのアップロードタイプをtxtに制限しました。 Javaでのファイルアップロードタイプの実装

FormFile fileObj = null; 

だから、誰かがtxtファイルにexeファイルを変更し、それをアップロードしようとしても、私は AutoDetectParser,ParseContext,metadataの助けを借りてそれをフィルタリングすることができています。

私はtxtに変換した後、バッチファイルを正常にアップロードしています。

このファイルのコンテンツタイプは、text/plainでtxtと同じです。

今、 このファイルのアップロードを制限するにはどうすればよいですか? 各種類のファイルコンテンツには、アップロードされたファイルを区別できるシグニチャがありますか? これらのjavaファイル、バッチファイルをtxtに変換して制限することはできますか?

答えて

1

あなたはWindowsバッチファイルについて話していると仮定します。これらにはヘッダやその他の特性がないため、「通常の」テキストファイルとは正確に区別できます。バッチファイルです。実際は、通常のテキストファイルです。つまり、通常はASCIIファイルです。それらを検出するには、任意の複雑なヒューリスティックをさまざまな成功率で考えることができます。したがって、信頼性の高い方法で検出することはできません。

バッチファイルを実際に「制限」することはできません。 REMまたは::というファイル名または接頭辞の前に、それぞれGOTO :eofを付けると、バッチファイル内のすべての行が実質的に非アクティブになります。あるいは、他のやり方をするかもしれない。

しかし、私は完全にはわかりませんが、なぜそれをしたいと思うのですか?通常のWebアプリケーションでは、アップロードされたファイルはファイルシステムの制限された部分に格納され、実行可能ではありません。攻撃者がインフラストラクチャの一部でアップロードされたファイルを潜在的に実行する可能性がある場合は、まずアーキテクチャ上の問題のように見えます。

+0

これは、Windowsバッチファイルの場合、読み込み可能なコンテンツを持つすべてのファイルは、.java、.jsp、.vbsなどの同じ署名を持つことになります。 –

+0

@AshutoshSingh: "同じ署名"あなたは「署名なし」を意味し、その後、基本的には「はい」ですが、それだけではありません。たとえば、Unicodeでエンコードできるファイルもあれば、[BOM](https://en.wikipedia.org/wiki/Byte_order_mark)で始まるかもしれません。これは署名ですが、.javaと.vbsを区別することはできません – zb226

+0

このBOMを利用してファイルタイプを区別することは可能でしょうか?はいの場合、どうですか? –