Autor Zpráva
phobos9007
Profil
Ahoj,

Tohle je spíše teoretický článek, ale rád bych si vše vyjasnil.

Jak vy například řešíte upload ve svých projektech, které vytváříte? Vím dobře, že jak pro <5.3.0 mime_content_type tak i pro >=5.3.0 finfo je potřeba příslušné rozšíření. Jak je to na českých hostinzích, případně na zahraničních?

Budu rád za každý názor ohledně této problematiky, používá ještě někdo něco jiného? Co byste mi doporučovali?
Děkuji
Carrot
Profil *
phobos9007:
Jak vy například řešíte upload ve svých projektech, které vytváříte?
Tak, že MIME typ z obsahu neanalyzujeme. Většinou to není potřeba.
AM_
Profil
pokud toto rozšíření není k dispozici, není tak složité si sám napsat převodí tabulku přípona->mime typ. Jak moc rozsáhlou ji uděláš už je na tobě.
phobos9007
Profil
Carrot:
Většinou to není potřeba
Jak pak ošetříš, aby tam někdo neuploadnul skript, když na FILES posílaný z prohlížeče se nedá vůbec spolehnout? A co třeba když chceme nahrát jen obrázky, písničky, atd.?

AM:
Vzhledem k tomu že přípony se dají snadno podvrhnout, dle mého názoru je to na nic
AM_
Profil
Pokud ti jde o to, aby uživatel nemohl nahrát PHP skripty, tak jde právě o přípony :) content-type se souborem není spojen už vůbec nijak; klidně txt souboru můžeš přiřknout při stahování typ "application/octetstream". je několik variant, jak se proti tomu ochránit:
- zakázat PHP v adresáři, kam se uploaduje
- zakázat všechny přípony, ve kterých server PHP vyhodnocuje
- soubory uploadovat všechny třeba s příponou ".u" a pomocí mod_rewrite nebo nějakého stahovacího PHPka k nim přistupovat pod správným názvem

Samotné mime typy nemají s bezpečností nic společného; jde spíš o to, když si návštěvník soubor otvírá/stahuje, aby ho jeho prohlížeč uměl správně zpracovat.
phobos9007
Profil
Zajímavé, díky ;) takže chceš říct, že výše zmíněné funkce a třídy odvozují MIME z přípony?
DoubleThink
Profil *
phobos9007:
Jak pak ošetříš, aby tam někdo neuploadnul skript, když na FILES posílaný z prohlížeče se nedá vůbec spolehnout?
Není nutné nic ošetřovat.
Pro zpracování souboru na serveru je rozhodující jeho přípona. Stačí ji tedy po uploadu podrobit kontrole. Na obsahu nezáleží.
AM_
Profil
[#6] phobos9007
no ano, jiná informace o typu souboru s ním spojená není :)
imploder
Profil
AM:
no ano, jiná informace o typu souboru s ním spojená není :)
To není tak docela pravda. MIME typy souborů závisí i na jejich obsahu, resp. můžou záviset. Když například vytvořím soubor kebule (bez přípony) a napíšu do něj třeba
<?php
echo "tohle je php skript, ale nemá příponu";
phpinfo();
?>

tak ho správce souborů v GNOME (nautilus) rozezná jako MIME typ Skript PHP (application/x-php).
AM_
Profil
imploder:
Ano, ale předpokládám, že to zjistí heuristicky (nejspíš z výskytu <?php :) ), ta informace pokud vím ani na linuxu není nikde explicitně uložená.
imploder
Profil
AM:
Explicitně uložená v souboru ta informace není (v tomto případě by ani nemohla, nijak jsem neurčil, že píšu zrovna PHP skript), pokud se neurčí typ podle názvu souboru (ve tvaru "*.přípona"), hledá se shoda s pravidly MIME typu pro obsah souboru (ukázka pro text/x-diff). V PHP to nejspíš bude podobně.
EDIT: carrot: j, tak tam je to teda jednosušší
Carrot
Profil *
imploder:
tak ho správce souborů v GNOME (nautilus) rozezná jako MIME typ Skript PHP (application/x-php)
Apache se ovšem řídí jen příponami - viz mod_mime:AddType

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0