2016-04-14 2 views
3

Python 3.4を実行しているDjango 1.8でファイルアップロードを制限する方法を実装しています。Djangoファイルパターンを確認する

基本的に、アップロード時にファイルのMIMEタイプを確認するには、mimetypesを使用します。しかし、ファイル名をbad_image.exeからbad_image.exe.jpgに変更すると、MIMEタイプはまだimage/jpegです。これは依然として悪意のある攻撃につながる可能性があります。

これを実際に実装する方法はありますか?

+0

私はあなたの質問を編集しましたが、依然として '.exe 'から' .jpg'に変更するとまだ 'image/jpg'ですが、あなたがしていることと期待していることを明確にする必要があります。 – techraf

+0

'.exe'ファイルの名前を' .jpg'ファイルに変更するだけです。例えば、 'bad_code.exe'は' bad_code.exe.pdf'に改名されます。このファイルの拡張子を正しく特定したいと思います。 – bryansis2010

+4

1つの正しい拡張子がない可能性があります。ファイルは、複数の書式、つまり同時に複数の書類にすることができます。そして、解釈は文脈に依存します。詳細については、https://events.ccc.de/congress/2014/Fahrplan/system/attachments/2562/original/Funky_File_Formats.pdfを参照してください。 –

答えて

0

MIMEタイプのブラックリストを禁止に設定することで、逆のチェックを実行する可能性があります。次に、これらのMIMEタイプのそれぞれについて、例えば、

mimetypes.guess_all_extensions('application/x-msdownload') 

悪意のある拡張子のリストを生成し、アップロードされたファイル名で検索することができます。

警告。

悪意のあるアップロードから守るためにファイル名とMIMEタイプに依存するのはnot safe practiceです。少なくとも、別のドメインにあるサンドボックス化したユーザーのアップロードは、防御を通過してサイトを攻撃する悪意のあるコードを防ぎます。

関連する問題