2016-04-14 149 views
3

我正在實現一種方法來限制運行Python 3.4的Django 1.8上的文件上載。Django識別文件模式

基本上,我想在使用mimetypes上傳文件時檢查它們的MIME類型。但是,當我操縱bad_image.exebad_image.exe.jpg的文件名時,MIME類型仍然是image/jpeg。這仍然可能導致惡意攻擊。

有沒有一種方法來實際執行這個?

+0

我編輯了你的問題,但我仍然不明白投訴背後的邏輯,當你從'.exe'改成'.jpg'時,它仍然是'image/jpg' ...我想你需要澄清你做了什麼以及你的期望是什麼。 – techraf

+0

所以我只是簡單地將'.exe'文件重命名爲'.jpg'文件,例如'bad_code.exe'重命名爲'bad_code.exe.pdf'。我想正確識別這個文件的擴展名。 – bryansis2010

+4

可能沒有一個正確的擴展名。文件可以是多邊形文件,即同時有多種格式。然後解釋取決於上下文。有關更多信息,請參閱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。至少,沙盒用戶在單獨的域中上傳可以防止任何惡意代碼滑過防禦系統攻擊您的網站。