[ kelja @ 19.12.2005. 23:26 ] @
Na koji nacin da proverim da li korisnik uploaduje zaista,recimo,MP3fajl?
Da li su moguca jedino (naravno nesto savrsenija) resenja tipa:
if(!eregi('mp3',$imefajla))die('Pogresan tip fajla!Samo MP3fajlovi...');
ili zaista mogu da proverim tip fajla?
Pomocu $_FILES['uploadovanifile']['type'] recimo?
Hvala!
[ flylord @ 19.12.2005. 23:30 ] @
u $_FILES imas mime tip tog fajla, koji je jako precizan i prepoznaje po defaultu malo veci broj fajlova :)
[ bojan_bozovic @ 19.12.2005. 23:31 ] @
Citat:
Pomocu $_FILES['uploadovanifile']['type'] recimo?


Prvo, moras da budes siguran da ce browser zaista da posalje MIME tip za fajl (IE6 to ne cini, zato sam ja morao da izbacim proveru MIME tipa na mom sajtu da bi forma za registraciju/upload radila sa IE)

Sto se tice provere tipa fajlova ja resamplujem fajl - pri uploadu napravim (sa GD) fajl iste velicine, probam da ucitam sliku i ako GD uspe da procita sliku, tek onda pisem u bazu, a za MP3 sumnjam da ce ti to pomoci...
[ kelja @ 20.12.2005. 00:01 ] @
Hvala na brzim odgovorima!
Evo za sve kojima treba nesto slicno:
Provera tipa fajla(MP3)

$tip=$_FILES['uploadedfile']['type'];
if($tip!="audio/mpeg")die('Pogresan tip fajla!Samo MP3fajlovi...');
Testirao sam ovo u lokalu(U IE6 izmedju ostalog)i cini se da funkcionise...
Evo sad sam probao i online i cini se da sve radi dobro(cak i u IE6)!



[Ovu poruku je menjao kelja dana 20.12.2005. u 01:09 GMT+1]

[Ovu poruku je menjao kelja dana 20.12.2005. u 01:19 GMT+1]
[ bojan_bozovic @ 20.12.2005. 07:45 ] @
Citat:

$allowedMIME = array('image/jpeg','image/jpg','image/png');
.....
$returnvalue=true;
.....
//if (!in_array($file['type'], $allowedMIME)) $returnvalue=false;
....
return $returnvalue;


Ovo je kod mene problematicni kod... Na svakom browseru koga sam mogao da se docepam radi perfektno, a na IE6 ne radi... Ne bi ni znao da mi jedan clan nije poslao e-mail da ceo dan ima problema da se registruje!
[ sale83 @ 20.12.2005. 08:02 ] @
Ja cesto koristim i ovo:
Code:

$dozvoljene_existencija = array(".mp3",".wma");

$ext = strrchr($_FILES['fileupload'][name],'.');

if(!in_array($ext,$dozvoljene_existencija)) {

// nece moci ove noci ... 

exit();

}




Citat:
Prvo, moras da budes siguran da ce browser zaista da posalje MIME tip za fajl (IE6 to ne cini, zato sam ja morao da izbacim proveru MIME tipa na mom sajtu da bi forma za registraciju/upload radila sa IE)


Jesi siguran da IE6 ne CINI ??????
Pa ja nisam imao problema sa time na IE6 WinXP pro without SP2 !!!!


[Ovu poruku je menjao sale83 dana 20.12.2005. u 09:05 GMT+1]
[ bojan_bozovic @ 20.12.2005. 08:21 ] @
@sale

Forma se nalazi na http://maestitia.net/register.php a ceo kod koji ne prolazi

Citat:

function checkuploadedfile($file) {
$maxupload = 262144;
$allowedMIME = array('image/jpeg','image/jpg','image/png');
$returnvalue=true;
if ($file['size'] > $maxupload) $returnvalue=false;
//if (!in_array($file['type'], $allowedMIME)) $returnvalue=false;
return $returnvalue;
}


Dakle, morao sam da komentarisem proveru MIME tipa inace sa IE6 non stop vraca false! Moguce je da je do forme... Isti kod je radio i u IE6 pre modifikovanja i usloznjavanja forme...
[ valeksa @ 20.12.2005. 09:00 ] @
Nesto savim OT.

Cesto vidjam da programeri u svojim funkcijama za provere, primenjuju metod 'dopusti sve-zabrani pojedinacno'.

Code:

function checkuploadedfile($file) {
  $maxupload = 262144;
  $allowedMIME = array('image/jpeg','image/jpg','image/png');
  $returnvalue=true;
  if ($file['size'] > $maxupload) $returnvalue=false;
  //if (!in_array($file['type'], $allowedMIME)) $returnvalue=false;

  return $returnvalue;
}



Mislim da je to losa navika.
Trebalo bi primenjivati metod 'zabrani sve-dopusti pojedinacno'.

Znaci ovaj primer bi bio:
Code:

function checkuploadedfile($file) {
  $maxupload = 262144;
  $allowedMIME = array('image/jpeg','image/jpg','image/png');
  $returnvalue=FALSE;
  if ($file['size'] <= $maxupload) $returnvalue=TRUE;
  //if (in_array($file['type'], $allowedMIME)) $returnvalue=TRUE;

  return $returnvalue;
}



Na ovaj nacin imate potpunu kontrolu sta se desava i nepoznate vrednosti ne mogu da ugroze vas kod..

Gomila sigurnosnih propusta se desava bas zbog ovakvog stila provera..


Pozdrav,
Vladan
[ sale83 @ 20.12.2005. 09:28 ] @
Ja bas nevidim neku razliku izmedju tvog (valeksa) i njegovog koda.



@ bojan_bozovic
Code:

function checkuploadedfile($file) {
  $maxupload = 262144;
  $allowedMIME = array('image/jpeg','image/jpg','image/png');
  $returnvalue=true;
  if ($file['size'] > $maxupload) $returnvalue=false;

  //if (!in_array($file['type'], $allowedMIME)) $returnvalue=false;

  return $returnvalue;
}



@ valeksa
Code:

function checkuploadedfile($file) {
  $maxupload = 262144;
  $allowedMIME = array('image/jpeg','image/jpg','image/png');
  $returnvalue=FALSE;
  if ($file['size'] <= $maxupload) $returnvalue=TRUE;
  //if (in_array($file['type'], $allowedMIME)) $returnvalue=TRUE;

  return $returnvalue;
}




Sve to moze ovako da se napise

Code:

function checkuploadedfile($file) {
  $maxupload = 262144;
  $allowedMIME = array('image/jpeg','image/jpg','image/png');
  if (!in_array($file['type'], $allowedMIME) or ($file['size'] > $maxupload)) return false;
  // Ako je potrebno
  //else return true;
}

[ valeksa @ 20.12.2005. 10:15 ] @
Citat:

Ja bas nevidim neku razliku izmedju tvog (valeksa) i njegovog koda.


Razlika i ne postoji, samo je stvar nacina kako pristupas...

Vise sam govorio o nacinu i principima pisanje koda. Konretan primer nije reprezentativan u tom smislu.

Zamisli da radis sa nepoznatim skupom vrednostima...kao na primer tipovi protokola...
pa shodno tome radis neke akcije. Sta ce se desiti kada se pronadje neki nov protokol?

Po nacinu koji je gore implementiran izasao bi sa TRUE vrednostima...
Mislim da je ispravnije izlaziti sa FALSE vrednostima da ne bi u pozivajucem kodu implementirao dodatne kontrole...

Ovako ti je sve u funkciji koja i treba da radi to sto radi - kontrolu,
znaci nemas rasipanja koda tj. da se ista stvar radi na vise razlitih mesta u kodu..

Stvar je samo principa i nacina kako se programira i sa tog aspekta i moj komentar.

Pozdrav,
Vladan




[ bzero @ 20.12.2005. 10:42 ] @
Citat:

Code:

$allowedMIME = array('image/jpeg','image/jpg','image/png');
.....
$returnvalue=true;
.....
//if (!in_array($file['type'], $allowedMIME)) $returnvalue=false;
....
return $returnvalue;



Ovo nece raditi kako treba, zbog toga sto IE salje mime type za jpg kao: image/pjpeg.
[ bojan_bozovic @ 20.12.2005. 16:40 ] @
@valeksa

Logicki isto mu dodje - ako MIME nije u nizu vraca se false

@bzero

Probacu da dodam i image/pjpeg u $allowedMIME
[ Nemanja Avramović @ 20.12.2005. 20:59 ] @
Ja proverim ekstenziju fajla, pa ako hoce da mi uploaduje PHP skriptu sa ekstenzijom mp3, neka izvoli :)

Code:
$fileinfo = pathinfo($_FILES['file']['name']);
$extension = $fileinfo['extension'];

if ($extension != 'mp3') { die ("Crkni 'akeru!"); }


...mp3 zameniti svojom ekstenzijom, a gore u $_FILES file zameniti imenom polja za fajl (u formi)...
[ bojan_bozovic @ 20.12.2005. 22:06 ] @
Citat:
Ja proverim ekstenziju fajla, pa ako hoce da mi uploaduje PHP skriptu sa ekstenzijom mp3, neka izvoli :)


Code:
$fileinfo = pathinfo($_FILES['file']['name']);
$extension = $fileinfo['extension'];

if ($extension != 'mp3') { die ("Crkni 'akeru!"); }


...mp3 zameniti svojom ekstenzijom, a gore u $_FILES file zameniti imenom polja za fajl (u formi)...


Ja nista move_uploaded_file dok se sve ne proveri, a ovaj tvoj kod nije bas najbolji ;) BTW uopste i ne koristim move_uploaded_file ;) Ne bih bas o kodu ;)
[ kelja @ 21.12.2005. 00:14 ] @
Sve u svemu,izgleda da nema nacina da se spreci 'aker,bar kad su u pitanju mp3 fajlovi.Ako neko bas zeli da bude zloban,napravice txt fajl(ili nesto gore)preimenovati ga u 'pesma.mp3',uploadovati ga i uzivati u plodovima svog nestasluka... :-(
Dobro je,ipak,sto vecina obicnih korisnika to ne zna,pa se mogu zavarati obicnom proverom ekstenzije:-)
Ja sam zaista pocetnik u ovoj oblasti(PhP)i voleo bih da neko demantuje ovo sto sam napisao,ali to sam cuo od iskusnog programera,tako da...






[Ovu poruku je menjao kelja dana 21.12.2005. u 01:15 GMT+1]
[ sale83 @ 21.12.2005. 03:32 ] @
Prvo sta ti vredi ako napises u notpade PHP kod i snimis sa existencijom .mp3 i uplodujes na server ????

Mislis da ces time da ugorzis bezbednost servera kao sa .gif i .jpg .php .txt itd ???

ODGOVOR JE NE !!!

MP3 Fajl koji u sebi zadrzi PHP kod u 99,99% slucajeva ne moze da ugorzi bezbednost servera !!

Svaki browser .mp3 existenciju ce da downloduje tako da je nece otvoriti kako .jpg ili .gif i omoguciti izvrsavanje malicijoznog php koda u doticnom fajlu.!!

Jos nisam nisao na nijedan slucaj da je server nastradao preko .mp3 existencije.!!
[ kelja @ 21.12.2005. 10:51 ] @
LM,Sale niko nije pominjao ugrozavanje bezbednosti servera...Ono 'aker bila je aluzija na jedan od postova...
Takodje,onaj primer sa txt fajlom nije verovatno najreprezentativniji,ali zamisli sledecu situaciju...Aplikacija koja omogucuje da korisnici uploaduju svoju muziku i da je slusaju na mp3 flash playeru...

1.Forma za registraciju i upload mp3 fajlova
2.Imena(mp3?)fajlova i putanje do njih se automatski smestaju u playlistu flash playera(koja se nalazi na nekom txt ili XML fajlu)
3.Player streamuje izabrane(mp3?)pesme
4.Slusaoci uzivaju
E,sad sta bi se desilo da neki 'nestasni djecarac' umesto pesme posalje ogroman fajl(koji nije pesma) sa ekstenzijom MP3?
Da li bi player radio streaming i na kraju pustio 'pesmu'ili bi prijavio gresku???
Offline-player radi streaming tisine:-)
Kad sam pomenuo mogucnost zloupotreba pre svega sam ovakve mogucnosti imao u vidu.Ono sto me zanima je da li postoji nacin zastite od ovakvih incidenata,ili ostaje da se uzdamo u ljudsku neiskvarenost?
[ Nemanja Avramović @ 21.12.2005. 14:03 ] @
Citat:
bojan_bozovic: Ja nista move_uploaded_file dok se sve ne proveri, a ovaj tvoj kod nije bas najbolji ;) BTW uopste i ne koristim move_uploaded_file ;) Ne bih bas o kodu ;)


Pa meni move_uploaded_file ide posle. Ajde reci zasto moj kod nije bas najbolji? Obrazlozi to sto kazes, nemoj tek tako da pricas....

@kelja: Nikada im ne bih dozvolio da preslusaju uploadovanu pesmu :D Mislim, chemu to? Valjda imaju neki mp3 plejer :)

[Ovu poruku je menjao JaHvram dana 21.12.2005. u 15:07 GMT+1]
[ bojan_bozovic @ 21.12.2005. 22:58 ] @
@Jahvram

Zato sto treba da se mucne glavom - MP3 ima svoj standard za header, tj. izmedju ostalog i magic bytes u hheaderu ;) $_FILES["upload"]["tmp_name"] otvoris i citas sa fread da li je, u stvari, to MP3 po headeru ;)
[ Nemanja Avramović @ 22.12.2005. 12:04 ] @
Ma ok je sve to, ja sam onaj primer prilagodio temi (mp3 ekstenzija), a u principu nikad nisam ni radio tako nešto - radio sam samo na uploadu tekstualnih fajlova. Ali opet ne kontam zašto moj kod ne valja kad sam prilično siguran da mi ne može nauditi ako uploaduje PHP fajl sa ekstenzijom mp3...
[ bojan_bozovic @ 22.12.2005. 12:35 ] @
Zato sto tvoja aplikacija moze taj mp3 da koristi - npr. za streaming - i ako hoces profi sajt korisniku ne smeju da serviraju greske ;) Slicno za svaki drugi fajl npr. PDF a umesto njega neko uploaduje RAR sa nekim crackom ;) Koliko sam losih uploadera video, samo se crack preimenuje u jpg i upload!!! ;) I to na kvazi-profi sajtovima koje drze firme sa mnogo $$$...
[ Nemanja Avramović @ 22.12.2005. 20:42 ] @
Ma ti i ja ovo posmatramo sa razlicitih tacaka. Meni je bilo bitno da ne moze da naudi sajtu...