Autor Zpráva
Dědeček
Profil *
Dobrej, mám dotaz jak zapsat typ souboru aby uzivatel nemohl nahrat nic co je php, html, asp a ruzne soubory co by mohli web narusit, dekuju
 if($_FILES['fupload']['type']==
Flashpro
Profil *
if($_FILES['fupload']['type'] == "application/octet-stream"){
.....
}
AM_
Profil
Probůh, takhle určitě ne a ani nijak jinak přes $_FILES['fupload']['type']. Klidně ti na server pošlu PHP kód s mime typem image/jpeg :)
Rozhodující je přípona, podle té Apache rozhoduje, jak k souboru přistupovat.
Řešení je několik:

1-ověřovat přímo příponu:
$parsed = explode('.', $_FILES['fupload']['name']); //rozdeli nazev souboru podle tecek
$ext = $parsed[count($parsed)-1]; //text za posledni teckou je pripona
if (in_array(strtolower($ext), array("php", "php3", "php4", "php5", "html", "cgi", "asp", "aspx", "htm"))){
  die ('nahravate soubor s nepovolenou priponou!');
}

Nedostatek tohoto řešení je zřejmý: nebezpečných přípon je opravdu hodně. Musíte je a) znát b) vyjmenovat.
//edit: ten strtolower je tam důležitý, jinak tím projde třeba .Php

2-připojit na konec "neškodnou" příponu
$uploaded_name = $_FILES['fupload']['name'].'.upload';

O 100% bezpečnější, ale zase by si to stahující uživatel musel přejmenovat zpátky.

3-stahovat skriptem, jednoduchý příklad:
<?php
  header('content-type: application/octet-stream'); //casem mozno vylepsit pomoci mime_get_type, takhle to nabidne stazeni treba i u obrazku
  readfile('uploads/$file.upload');
?>

A nejlépe přímo do adresáře uploads zakázat přes .htaccess přístup, pak ani nemusíš uploadům přidávat '.upload'
Fireous
Profil
veľmi pekne napísané,aj vysvetlené,len by som ešte k tomu prvému príkladu dodal,že je lepšie uprednostňovať blacklisting,pred whitelisting-om,teda nenapíšeš aké prípony tam nechceš,ale aké chceš,to vyrieši aj pár nedostatkov
AM_
Profil
Fireous
Jo, naprostá pravda, bohužel za předpokladu, že máš ponětí, co uživatel bude nahrávat. U nějakých univerzálnějších upload skriptů pro různé typy souborů je to ale stejně nevhodné...
Fireous
Profil
tak tam je najlepšie to pridávanie neškodnej prípony,aj keď sa mi zdá že som niekde videl spôsob ako to obísť pomocou nulového bajtu
imploder
Profil
Když tam .htaccessem zakáže přístup, tak nemusí přípony řešit vůbec.
Dědeček
Profil *
@AM_ .. díky moc .. zvolil jsem první možnost, příjde mi jako nejlepší je pro mě lepší blacklist, chci omezit jen tyhle přípony, na to abych tam pak vypsal do whitelistu všechny, doc, docx, pdf atd..
Ještě jednou diky :)
srigi
Profil
AM_
Preco si zvolil WhiteList toho co neprejde? Osobne si myslim, ze lepsi je WhiteList, toho co je povolene.

Dědeček
Mimochodom napisal som male rozjimanie nad uploadom obrazkov.
AM
Profil *
srigi
viz [#5] oho co neprojde se spíš říká BlackList :) jak říkám, není to nejšikovnější, ale když potřebuješ nahrát téměř jakoukoli příponu a nejsi schopný realizovat složitější řešení, tak bych v tom neviděl tak velký problém.

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: