Avatar billede cyberdude Nybegynder
27. juni 2004 - 22:01 Der er 14 kommentarer og
3 løsninger

bestem filtyppe ved upload via web

Hejsa!

Jeg kan ved hjælp af
--- kode ---
if ($pics4 != 'none') {
$fileext = GetImageSize($pics4);
$fileext = $fileext[2];
--- kode ---
bestemme hvilke typpe fil det er man uploader

Desværre kan jeg ikke finde noget som gør det samme for andre fil typper - her tænker jeg mere bestemt på .pdf .txt .doc evt. .htm(l)

Nogen der har en upload funktion til at tjekke hvilken fil det er brugeren forsøger at uploade ?
Avatar billede jaw Nybegynder
27. juni 2004 - 22:04 #1
$newname = "test.php";
$file = pathinfo($newname);
echo $file['extension'];

Det her vil returnere: .php som er test.php's extension...
Avatar billede googolplex Novice
27. juni 2004 - 22:08 #2
Du kan også tjekke imod $_FILES["upfil"]["type"]
Avatar billede jaw Nybegynder
27. juni 2004 - 22:08 #3
Hvis det er til upload, hvor du kun vil tillade nogen typer, så kan du:

$filetyper = array("image/gif", "image/jpeg", "image/pjpeg", "image/png");
if (!in_array($_FILES['upfile']['type'], $filetyper)) {
  //upload
}
Avatar billede erikjacobsen Ekspert
27. juni 2004 - 22:15 #4
Man kan ikke bruge $_FILES['upfile']['type'] til noget. Enhver hacker kan sætte
"image/gif" på en .php fil, og så har man uploadet et script til en fremmed server.
Reelt kan man kun checke på extension.
Avatar billede cyberdude Nybegynder
27. juni 2004 - 22:16 #5
tror du misforstod spørgsmålet, prøver lige igen

--- kode ---
<form action="fil.upload.php" name="upload_filer" method="post" ENCTYPE="multipart/form-data">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1024000">
Fil du vil uploade<br>
<input type="file" name="fil" class="txtfield">
<br>
Link navn<br>
<input type="text" name="link_navn" value="" class="txtfield">
<br>
Beskrivelse af fil<br>
<textarea name="fil_besk" rows="10" cols="15" class="txtarea"></textarea>
<p>
<input type="submit" name="submit_upload_fil" value="Send fil til server" class="button2">
</form>

if(isset($submit_upload_fil)) {
UploadFil($MAX_FILE_SIZE,$fil,$link_navn,$fil_besk);
}

function UploadFil($MAX_FILE_SIZE,$fil,$link_navn,$fil_besk) {
global $respons_msg;
$created = time();
sql("insert into files (id,menu_id,headline,fil_navn,fil,tekst,sort,oprettet,aktiv) values ('','','','$link_navn','','$fil_besk','','$created','0')");
$file_id = mysql_insert_id();
if ($fil != 'none') {
// Bestem hvilke fil-typpe der uploades.
$fil1 = "file";
$fil2 = "_";
$fil3 = "$file_id";
$file4 = ".";
$fil5 = "???"; // det er her extensionen på filen skal være
$filnavn = "$fil1$fil2$fil3$file4$fil5";
copy($fil, "/html/$filnavn");
sql("update files set fil = '$filnavn' where id = '$file_id'");
$respons_msg = "Filen er uploadet";
}
}
--- kode ---

Problemet er at hvis jeg blot angiver $fil til sidst i copy(..... functionen så får jeg en fejl hvor filen efter fejlen at dømme heder noget ala "phpxxxxx"

Ville ellers mene at det ville uploade filen med det navn som der stod i feltet "fil" fra formularen.....

Så det er altså extensionen på den fil der kommer ind på serveren fra formularens felt "fil" og som kan / må være .pdf .txt .doc .htm(l) filer

Så det jeg gerne vil have er en function som undersøger den uploadede fil for hvilke extension den har, da jeg omdøber alle uploadede filer til at hede file_ID nummer fra db.orginale extension
Avatar billede erikjacobsen Ekspert
27. juni 2004 - 22:25 #6
Læs http://dk2.php.net/manual/en/features.file-upload.php
og brug $_FILES['userfile']['name'] - der står det oprindelige filnavn
Avatar billede swaxi Nybegynder
27. juni 2004 - 23:06 #7
nu er filnavnet jo rimeligt usikkert, at bruge til at afgøre dokumenttypen udfra. hvis ellers din server understøtter det (mange gør desværre ikke), kan du bruge funktionen : mime_content_type()
Avatar billede erikjacobsen Ekspert
27. juni 2004 - 23:12 #8
Hvis det er et offentligt upload skal du stadig passe på hackere, også med mime_content_type().
Avatar billede googolplex Novice
28. juni 2004 - 08:31 #9
erikjacobsen: Er der også mulighed for at fuske med extension ?

Bør man ikke tjekke mod både extension samt MIME-type ?
Avatar billede erikjacobsen Ekspert
28. juni 2004 - 10:45 #10
Jo, såmænd, men man får ikke noget ud af det. Ideen i det har hacking, jeg hele
tiden skriver om, er at uploade et billede til et katalog, så serveren tror
det er et billede på mime-typen, men filen hedder fx xxx.php, og derfor kan udføres
på serveren.

Den medsendte mime-type er blot hvad klienten (browseren) mener typen bør være.
Avatar billede swaxi Nybegynder
28. juni 2004 - 12:23 #11
funktionen mime_content_type() fungerer på en fil. det er ikke det samme som at checke $_FILES['userfile']['type']
derfor er mime_content_type ikke noget en hacker kan kompromittere.
Avatar billede erikjacobsen Ekspert
28. juni 2004 - 12:33 #12
Jo, da, han kan da bare lave en fil med de rigtige bytes i starten, kalde den .php,
og længere nede starte en <?...?>  - du skal ikke undervurdere hackere.
Avatar billede swaxi Nybegynder
28. juni 2004 - 16:05 #13
ja bevares, men det er nu også lidt mere kompliceret end blot at fake mime-type sendt med filen. kombineret med et check på filendelse burde det jo være ok.
men du har ret - det havde jeg ikke lige tænkt på.

hvad jeg mente med "usikkert" var ikke så meget møntet på hackere, men snarere på hvordan han skal håndtere filen. det var mit indtryk, at det var det han spurgte til.
Avatar billede erikjacobsen Ekspert
28. juni 2004 - 17:31 #14
Jah, vi har bevæget os lidt ud over hvad han har spurgt om.

Men dem der har oplevet at få "stjålet" deres hjemmeside, kan måske - i nogle
tilfælde - finde skyldneren her ;)
Avatar billede cyberdude Nybegynder
03. august 2004 - 19:43 #15
må hellere få lukket...

Og det er nu også på en lukket administrations side det skal / skulle bruges :-)

erik smider du et svar... så må i dele pointene...
Avatar billede erikjacobsen Ekspert
03. august 2004 - 19:47 #16
Nej tak, jeg samler slet ikke på point.
Avatar billede Slettet bruger
17. september 2004 - 17:20 #17
Hvis man laver et check på måde mime-typen og sørger for at der ikke kan uploades filer med andre extensions end eks. .gif eller .jpg, vil det være sikkert?
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