Autor Zpráva
Fuk
Profil *
Jak se dá zjistit nebo ošetřid, aby v názvu souboru neměl diakritiku a mezery?
Darker
Profil
$filename=preg_replace  ("~[^0-9a-zA-Z]~","" ,$_FILES["file"]["name"]);

Odstraní vše nežadoucí.
Na mezery použiješ str_replace()
Keeehi
Profil
Darker:
Toto ti smaže i ty mezery. Odstraní to však i třeba tečku, takže vlastně začnou vznikat soubory bez koncovky.
Další věc: Co když název souboru bude "čřžýá.jpg"? Zbude z něj jen "jpg". To asi není dobré.
Takže lepší by asi bylo nějaké nahrazení znaků (Á => A, ü => u, atd.) Můžeš využít třeba toto.

Po tomto bych provedl odstranění těch znaků, které by nebyly převedeny. Ovšem je třeba Darkerův regulár upravit. Pořád však hrozí nebezpečí nulové délky názvu, takž nezapomenout ošetřit! A nakonec si zkontrolovat koncovku, zda je povolené takový soubor nahrát.

PS schválně jestli víš, proč kontrolu koncovky nechat až na konec.
Fuk
Profil *
Díky.
Fuk
Profil *
Keeehi:
PS schválně jestli víš, proč kontrolu koncovky nechat až na konec.
Tak to nevím. Nechám se nachytat.
Keeehi
Profil
Fuk:
Zjednodušený příklad:

//1.
if(substr($_FILES["file"]["name"],-3)!="php"){
  $filename=preg_replace  ("~[^0-9a-zA-Z\.]~","" ,$_FILES["file"]["name"]);
  //uložení souboru pod názvem z $filename
}

//2.
$filename=preg_replace  ("~[^0-9a-zA-Z\.]~","" ,$_FILES["file"]["name"]);
if(substr($filename,-3)!="php"){
  //uložení souboru pod názvem z $filename
}

Vidíš rozdíl (kde by mohl nastat u prvního problém?)

Rozluštění:
Když uploaduji soubor s názvem "osklivy.phpš" tak první ho změní na "osklivy.php" a klidně si ho uloží.
Fuk
Profil *
Abych se přiznal, tak jsem to neviděl a musel jsem si to přečíst.

Když bys sis uploadnul osklivy.phpš tak se to převede a teoreticky kdyby měl dobře v nitřní kód, tak by to ničemu nevadilo.
Ale díky za vysvětlení, tuto chvíli jsem zas moudřejší a už si budu dávat větší pozor jak to udělat pořádně.
Keeehi
Profil
Trochu jsem tě nepochopil a myslím, že ty mě taky ne.
Ten kód z osklivy.phpš se nevloží do scriptu pro upload. O tom to není. Jde o to, že to projde kontrolou nepovolené koncovky (hpš!=php), ale pak se to š ořízne a soubor se uloží pod osklivy.php. Potom není problém zavolat adresu www.example.com/uploady/osklivy.php a můj nahraný kód se spustí. Můžu tam mít třeba kód, který projde všechny složky a do zipu přidá všechny soubory ch najde a pak tento zip nabídne ke stažení. A v tu ránu mám u sebe na počítači úplnou kopii tvých stránek. Z těch souborů si můžu zjistit přihlašovací údaje k databázi a zase si můžu nahrát nový script a stáhnout celý obsah databáze. Prakticky si mohu s tvým webem dělat co chci. Takže na ošetření uploadovaných souborů si musíš dávat pozor.
__construct
Profil
Keeehi:
Můžeš využít třeba toto.
Alebo lepšie toto s tým že si uprav regulár aby nemenil na pomlčku aj bodku…
Davex
Profil
Keeehi:
Ve jménu souboru je dobré zakázat jakýkoliv výskyt .php, protože na některých webserverech se interpretuje PHP kód i v souborech s libovolnou příponou: nevinnysoubor.php.cokoliv.

Nebo lépe zakázat v .htaccess provádění všech skriptů v adresáři s nahranými soubory:
SetHandler default-handler
Keeehi
Profil
Davex:
O tom vím. Už jsem o tom četl tady. (část PHP Upload) Jak ale bylo vidět, Fuk ani netušil, že by mohl mít nějaký problém s bezpečností. Věřím (doufám), že jsem mu ukázal jak je důležité nevěřit uživatelům a sám si něco o bezpečnosti našel. Pokud tak neudělal, je to jeho vlastní problém.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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