FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Hej
Jag har hittat en kod, som jag länkar till med popup, och då körs nedan kod. Den har två funktioner. 1) Välja en fil att ladda upp. 2) Ladda upp filen. Jag har med hjälp av session id kunskap att veta vem som laddar upp. Tanken är att ladda upp bilder, txt eller pdf typ. Min fråga: Hur kan jag se till att ingen laddar upp dåliga saker såsom .exe fil eller annan fil ändelse som ökar sårbarheten. PS. det finns säkert kod, som är helt onödig, men dräller kvar. ska ta bort post senare kanske. Jag hade lite strul att hitta lösning, innan jag km att tänka på session. DS. Tack, Glad Påsk! / Tony <?php session_start(); if(!session_is_registered(myusername)){ header("location:main_login.php"); } $myusername = $_SESSION['myusername']; echo "session:$myusername !"; ?> <html><form enctype="multipart/form-data" action="uploader.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> <input type="hidden" name="laddaupp" value="laddatupp" /> <?php echo "<input type='hidden' name='myusername' value=$myusername>"; ?> Choose a file to upload: <input name="uploadedfile" type="file" /><br /> <input type="submit" value="Upload File" /> </form> <?php // Where the file is going to be placed $target_path = "uploads/"; /* Add the original filename to our target path. Result is "uploads/filename.extension" */ $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); $target_path = "uploads/"; $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { $host="xxxxxxx"; $username="xxxxxx"; $password="xxxxxx";$db_name="xxxxxxxx"; mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB"); $sql6="INSERT INTO xxx_tabell (kolumn1, kolumn2, kolumn3) VALUES ('foto', '$myusername', '".basename( $_FILES['uploadedfile']['name'])."')"; $result6=mysql_query($sql6) or die("Kunde inte hitta attribut."); echo "Filen ". basename( $_FILES['uploadedfile']['name']). " har laddats upp"; } else{ echo "There was an error uploading the file, please try again!"; } ?> Senast redigerad av TonyL den 2010-04-01 klockan 10:28 |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Bara ett inlägg till!
|
Kolla in Fileinfo:
http://se.php.net/manual/en/function.finfo-file.php Med den funktionen kan du hämta ut MIME-typen på filen och kolla om den ingår i de typer av filer du vill acceptera. Det är mycket säkrare än att till exempel förlita sig på filändelsen. Du bör givetvis stänga av alla former av skript (framförallt PHP) i den mapp som filerna laddas upp till. |
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
Ok, tack, ska kolla in det.
Glad Påsk! / Tony |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Medlem
|
I senaste versionen av PHP så är funktionen "mime_content_type" borttagen, och istället hänvisar man till finfo som emilv nämner.
Jag har gjort denna funktion som försöker hitta mime-typen oberoende av operativsystem och PHP-version. Du får avgöra själv om det är intressant att använda! ![]() Kod:
function getMimeType($filepath){ if($filepath === false || !is_file($filepath)) return false; if(function_exists('finfo_open')){ $finfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($finfo, $filepath); finfo_close($finfo); return $mimetype; }elseif(strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN'){ $mimetype = trim(exec('file -bi '.escapeshellarg(realpath($filepath)))); return $mimetype; }elseif(function_exists('mime_content_type')){ return mime_content_type($filepath); } return false; } |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Supermoderator
|
Att kolla MIME-type på filen är bra för att se till att användare inte laddar upp fel filtyp av misstag. Däremot hindrar det ingen som medvetet vill sabotera för dig.
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
Hej
jo, ok, då tror jag att jag kan få fram mime typ. Men vad ska jag göra sedan. Ska jag ignorera om det är en .exe samt vilken ändelse mera? Eller .... Gällande foldern, så har webbhotellet jag har en speciell server som de rekomenderar att jag skapar en plats på. Där kan tydligen ingen köras ifrån. |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Nykomling
|
Som jag förstår dig är det viktigt att ingen kan ladda uppfiler med virus el. likn.
Isåfall är det bättre att ha en lista över tillåtna filtyper än att lista de som ska blockeras. Det finns ju hundra olika filformat för komprimerade filtyper t.ex., och de kan innehålla .exe-filer. Sen finns det lika många icke-exekverbara filtyper som kan ställa till problem, t.ex. word-filer med macron, register-filer etc. Gör en lista över de (mime) filtyper du vill tillåta, och blockera allt annat. |
||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Medlem
|
Problemet är väl den här typen av filkombinationer:
http://forums.jinx.com/topic.asp?TOPIC_ID=32319 |
||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Medlem
|
ok, tack.
/ Tony |
||
![]() |
![]() |
Svara |
|
|