04. august 2006 - 15:34
Der er
11 kommentarer og 2 løsninger
Sikkerhed ved upload
Hej. Jeg har en side, hvor det skal være muligt, at uploade billeder, og kun billeder. Jeg har derfor lavet følgende script: $tmp = $_FILES['userfile']['tmp_name']; if (@getimagesize($tmp)) { move_uploaded_file($_FILES['userfile']['tmp_name'], '/sti/til/fil'); header("location:index.php"); } else { header("location:index.php"); } Nu lyder mit spørgsmål som, om jeg med ovenstående er helt sikker på, at der ikke kan uploades andet end billeder?? Med venlig hilsen Christian
Annonceindlæg fra Immeo
04. august 2006 - 15:47
#1
Du kan jo lave et array, hvor filen går i gennem og hvis den ikke har endelsen .jpg, .gif eller .png, så kan den ikke uploades. ;-)
04. august 2006 - 15:51
#2
Men nu har jeg jo lavet det ovenstående, og spørgsmålet er, om det ikke er godt nok?
04. august 2006 - 15:55
#3
Det er det vel, når du nu spørger om imagesize...
04. august 2006 - 16:24
#4
okay, så bruger jeg bare det :) smid evt. et svar.
04. august 2006 - 16:36
#5
getimagesize er godt, men ikke helt godt nok. Du bør checke på endelsen, eller selv lave endelsen ud fra getimagesize()'s 2. resultat i arrayet (typen)...
04. august 2006 - 16:40
#6
Du kan bruge det der array-halløj jeg sagde i starten... ;oD
04. august 2006 - 16:44
#7
okay. Jeg bruger en kombination så. Hvis coderdk så også lige vil smide et svar.
04. august 2006 - 16:49
#8
Men noget andet er. Hvad er det, der ikke er godt nok ved getimagesize?
04. august 2006 - 16:54
#9
Hvis endelsen er .php kan arbitrær kode køres, et harmløst utestet eksempel: <?php $billede = 'bldot.gif'; // Billednavn $ud = "ud"; // Hvilken folder skal der skrives til? $cnts = file_get_contents( $billede ); $cnts .= '<?php phpinfo(); ?>'; // Tilføj noget php til data $fp = fopen( "$ud/$billede.php", "w" ); // Skriv og lav endelse til .php fwrite( $fp, $cnts ); fclose( $fp ); $img = getimagesize( "$ud/$billede.php" ); // Hent billedinfo echo "<pre>"; var_dump( $img ); echo "<pre>"; // Vis billedinfo // Vis billede og link direkte til billede // Følges linket køres php-koden echo "<img src='$ud/$billede.php'><br><a href='$ud/$billede.php'>her</a>"; ?> :)
04. august 2006 - 16:55
#10
(Det resulterende "billede" vil gå igennem din upload og "bestå" getimagesize-testen)
04. august 2006 - 16:57
#11
et simpelt: if ( !preg_match("#\.(gif|jpe?g|jpe|png)$#i", $_FILE['userfile']['name'] ) ) { die( "Ulovlig filtype." ); } Ville nok være tilstrækkeligt, ud over din getimagesize (du kan nok undgå getimagesize, men så er du da sikker på at det er et gyldigt billede).
04. august 2006 - 17:00
#12
Tak skal i have :)
04. august 2006 - 17:10
#13
Velbekomme
Vi tilbyder markedets bedste kurser inden for webudvikling