Avatar billede cpawdk Nybegynder
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
Avatar billede mcardle Nybegynder
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. ;-)
Avatar billede cpawdk Nybegynder
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?
Avatar billede mcardle Nybegynder
04. august 2006 - 15:55 #3
Det er det vel, når du nu spørger om imagesize...
Avatar billede cpawdk Nybegynder
04. august 2006 - 16:24 #4
okay, så bruger jeg bare det :)

smid evt. et svar.
Avatar billede coderdk Praktikant
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)...
Avatar billede mcardle Nybegynder
04. august 2006 - 16:40 #6
Du kan bruge det der array-halløj jeg sagde i starten... ;oD
Avatar billede cpawdk Nybegynder
04. august 2006 - 16:44 #7
okay. Jeg bruger en kombination så. Hvis coderdk så også lige vil smide et svar.
Avatar billede cpawdk Nybegynder
04. august 2006 - 16:49 #8
Men noget andet er. Hvad er det, der ikke er godt nok ved getimagesize?
Avatar billede coderdk Praktikant
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>";
   
?>

:)
Avatar billede coderdk Praktikant
04. august 2006 - 16:55 #10
(Det resulterende "billede" vil gå igennem din upload og "bestå" getimagesize-testen)
Avatar billede coderdk Praktikant
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).
Avatar billede cpawdk Nybegynder
04. august 2006 - 17:00 #12
Tak skal i have :)
Avatar billede mcardle Nybegynder
04. august 2006 - 17:10 #13
Velbekomme
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester