Autor | Zpráva | ||
---|---|---|---|
starburst Profil |
#1 · Zasláno: 26. 2. 2009, 09:50:09 · Upravil/a: starburst
zdravím,
potřeboval bych zjistit jakou má soubor který sme uploadovali koncovku a ulozit to do databaze. napsal sem toto: if ($soubor_type=="image/jpeg") $typ = "jpg"; elseif ($soubor_type=="image/gif") $typ = "gif"; elseif ($soubor_type=="application/pdf") $typ = "pdf"; elseif ($soubor_type=="application/msword") $typ = "doc"; elseif ($soubor_type=="application/vnd.ms-excel") $typ = "xml"; elseif ($soubor_type=="application/vnd.ms-powerpoint") $typ = "ppt"; elseif ($soubor_type=="application/zip") $typ = "rar"; elseif ($soubor_type=="audio/x-wav") $typ = "wav"; elseif ($soubor_type=="text/plain") $typ = "txt"; elseif ($soubor_type=="text/html") $typ = "txt"; elseif ($soubor_type=="video/msvideo") $typ = "mpg"; elseif ($soubor_type=="video/mpeg") $typ = "mpg"; else $typ="jine"; - jsou to vsechny povoleny MIME typy ktery muzu uploadnout ale nefunguje to. vzdycky mi to ulozi do databaze typ "jine" at tam nahraju cokoliv. nechapu to. Díky za radu |
||
srigi Profil |
#2 · Zasláno: 26. 2. 2009, 10:17:54
Ukaz kod, ktory naplnuje premennu $soubor_type
|
||
dRaGen Profil |
#3 · Zasláno: 26. 2. 2009, 13:20:45
NIKDY nepoužívej MIME. Dá se jednoduše zmanipulovat, protože se generuje už v klientské části.
Silně doporučuji zjišťovat typ souborů pomocí koncovky tedy if (strtoupper(substr($_FILES['soubor']['name'],-4)) == ".JPG"){ |
||
srigi Profil |
#4 · Zasláno: 26. 2. 2009, 13:34:26
dRaGen
MIME typ mozes zistit aj na serveri, napr. pomocou balicka funkcii fileinfo. |
||
starburst Profil |
#5 · Zasláno: 26. 2. 2009, 14:00:43 · Upravil/a: starburst
no v podstate mi nejde o to, že se to dá nějak zmanipulovat. je to skript který je v administraci a normalni uzivatel se k tomu nedostane... v podstate je mi jedno co tam uploaduje protoze je to admin, spis potrebuju zjistit co to vlastne uploadoval a priradit tomu ikonku.
cely skript na upload mam takle: if ($akce == "Upload") { /* Ziskani datumu */ $date=Date("Y-m-d"); include ('databaze_option.php'); $tabulka = "downloads"; // nazev tabulky $dotaz = "SELECT * FROM $tabulka WHERE `name` = '$soubor_name'"; $query = mysql_query($dotaz) or die (mysql_error()); // zjistime, zda se v databazi jiz takovy soubor nenachazi $Vysledek = mysql_fetch_array($query); if($Vysledek['jmeno']) { // uploadovany soubor jiz existuje echo "uploadovany soubor jiz existuje"; include("zbyteka.php"); die;} else if (($soubor_type="image/*") or ($soubor_type="application/pdf") or ($soubor_type="application/msword") or ($soubor_type="application/vnd.ms-excel") or ($soubor_type="application/vnd.ms-powerpoint") or ($soubor_type="application/zip") or ($soubor_type="audio/x-wav") or ($soubor_type="text/*") or ($soubor_type="video/*")) { if (copy ($soubor, "../clenove/dokumenty/$soubor_name")) { print "Soubor $soubor_name o velikosti $soubor_size bajtů byl úspěšně uploadnut na server<BR>"; /* tu čast slozityho vybirani souboru ktery muze nahrat muzu v podstate klidne vynechat protoze je mi to jedno co tam nahraje */ } else { print "Při nahrávání souboru došlo k chybě!<BR>"; } } else { print "Soubor není požadového typu! Lze nahrávat soubory typu images, docs, videos, archives<BR>"; } if ($soubor_type=="image/jpeg") $typ = "jpg"; elseif ($soubor_type=="image/gif") $typ = "gif"; elseif ($soubor_type=="application/pdf") $typ = "pdf"; elseif ($soubor_type=="application/msword") $typ = "doc"; elseif ($soubor_type=="application/vnd.ms-excel") $typ = "xml"; elseif ($soubor_type=="application/vnd.ms-powerpoint") $typ = "ppt"; elseif ($soubor_type=="application/zip") $typ = "rar"; elseif ($soubor_type=="audio/x-wav") $typ = "wav"; elseif ($soubor_type=="text/plain") $typ = "txt"; elseif ($soubor_type=="text/html") $typ = "txt"; elseif ($soubor_type=="video/msvideo") $typ = "mpg"; elseif ($soubor_type=="video/mpeg") $typ = "mpg"; else $typ="jine"; $dotaz = "INSERT INTO $tabulka VALUES (NULL,'$soubor_name','$popis','$date','$typ')"; mysql_query($dotaz) or die("Error: DB pridat!: ".mysql_error()); } |
||
blaaablaaa Profil |
#6 · Zasláno: 26. 2. 2009, 16:00:01
1.
if (($soubor_type="image/*") or ... 2. kde beres promennou $soubor_type? jestli z formulare, tak to ma byt $_FILES["soubor"]["type"] |
||
starburst Profil |
#7 · Zasláno: 26. 2. 2009, 17:25:39
k tomu bodu 1 - opraveno - ale kupodivu to i tak fungovalo.
k bodu 2 - ano beru ho z formulare. ale typ souboru se mi tam ukladal. stejne tak mam brany $soubor_name a $soubor_size a funguje to. ale predelal sem to na to $_FILES["soubor"]["type"] a uz to funguje... nechapu proc neco vezme a neco ne... kazdopadne diky moc. starburst |
||
dRaGen Profil |
#8 · Zasláno: 26. 2. 2009, 22:08:22
starburst => jak jsem psal dříve, neni dobře používat mime protože je uživatel může lehce editovat. A propo to nevadí že je to v administraci, právě že se ti útočník dostane do administrace, tak by maximálně mohl smazat články či jiné věci, ale na to je záloha databáze, ale tim že bys tam měl nezabezpečenej upload tak by ti mohl vklidu smazat celý ftp, a celou db ...
|
||
starburst Profil |
#9 · Zasláno: 27. 2. 2009, 09:45:09 · Upravil/a: starburst
to dRaGen: a tak jak bych to teda mel predelat? kdyz napisu misto toho
if ($_FILES["soubor"]["type"]=="image/jpeg") $typ = "jpg"; toto: if (strtoupper(substr($_FILES['soubor']['name'],-4)) == ".JPG") $typ = "jpg"; tak by to melo byt v poradku? myslim co se tyce bezpecnosti? |
||
starburst Profil |
#10 · Zasláno: 27. 2. 2009, 09:47:59 · Upravil/a: starburst
vlastne to je blbost to co sem tedka napsal:-)
no takze oprava... kdyz to dam misto: if (($_FILES["soubor"]["type"]="image/*") or ($_FILES["soubor"]["type"]="application/pdf") or ($_FILES["soubor"]["type"]="application/msword") atd atd..) { toto: if ((strtoupper(substr($_FILES['soubor']['name'],-4)) == ".JPG") or (strtoupper(substr($_FILES['soubor']['name'],-4)) == ".DOC") or (strtoupper(substr($_FILES['soubor']['name'],-4)) == ".XLS") atd atd) { |
||
Časová prodleva: 15 let
|
0