sql >> Databáze >  >> RDS >> PostgreSQL

Jak rozpoznat textový soubor z mého linuxového počítače přes kód django bez kontroly jeho přípony a také velikosti souboru?

Pravděpodobně budete chtít zjistit typ MIME uploadu bez ohledu na příponu souboru, a to se často provádí čtením záhlaví souboru, aby se zjistila „magická čísla“ nebo jiné bitové vzory označující skutečnou povahu souboru. Textové soubory jsou často okrajovým případem, kdy není detekováno žádné záhlaví a prvních x bajtů je tisknutelných v ASCII nebo Unicode.

I když je to trochu králičí nora, do které se můžete ponořit, existuje několik knihoven Pythonu, které to udělají za vás. Například:https://github.com/ahupp/python-magic bude fungovat pro vaše potřeby jednoduchým odvozením typu mime podle obsahu souboru, který pak porovnáte s typy, které chcete přijmout.

Poněkud související sadu příkladů kódu specifických pro vaše potřeby lze nalézt zde:https://stackoverflow.com /a/28306825/7341881

Edit:Eddieho řešení je funkčně ekvivalentní; python-magic zabalí libmagic, což je to, na co ťuká nativní příkaz "soubor" Linuxu. Pokud se rozhodnete jít cestou podprocesu, buďte zvlášť opatrní, abyste nevytvořili zranitelnost zabezpečení nesprávnou dezinfekcí uživatelského vstupu (např. uživatelem poskytnutý název souboru). To by mohlo vést k útoku poskytujícímu libovolný přístup k běhovému prostředí vašeho serveru.



  1. Spor o sekvenci RAC

  2. Chyba vložení PHP/SQL při použití pojmenovaných zástupných symbolů

  3. AVG + vnitřní spojení

  4. JOIN Multiple Table na základě časového razítka a další podmínky