Kom ihåg mig?
Home Menu

Menu


Hindra att farliga filer laddas upp.

Ämnesverktyg Visningsalternativ
Oläst 2010-04-01, 09:28 #1
TonyL TonyL är inte uppkopplad
Medlem
 
Reg.datum: Sep 2008
Inlägg: 189
TonyL TonyL är inte uppkopplad
Medlem
 
Reg.datum: Sep 2008
Inlägg: 189
Standard Hindra att farliga filer laddas upp.

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
TonyL är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-01, 10:46 #2
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
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.
emilv är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-01, 11:09 #3
TonyL TonyL är inte uppkopplad
Medlem
 
Reg.datum: Sep 2008
Inlägg: 189
TonyL TonyL är inte uppkopplad
Medlem
 
Reg.datum: Sep 2008
Inlägg: 189
Ok, tack, ska kolla in det.

Glad Påsk!

/ Tony
TonyL är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-01, 12:14 #4
objx objx är inte uppkopplad
Medlem
 
Reg.datum: Mar 2008
Inlägg: 154
objx objx är inte uppkopplad
Medlem
 
Reg.datum: Mar 2008
Inlägg: 154
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;

}
objx är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-01, 12:47 #5
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
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
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-01, 13:14 #6
TonyL TonyL är inte uppkopplad
Medlem
 
Reg.datum: Sep 2008
Inlägg: 189
TonyL TonyL är inte uppkopplad
Medlem
 
Reg.datum: Sep 2008
Inlägg: 189
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.
TonyL är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-01, 13:30 #7
geon geon är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2009
Inlägg: 8
geon geon är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2009
Inlägg: 8
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.
geon är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-01, 13:38 #8
objx objx är inte uppkopplad
Medlem
 
Reg.datum: Mar 2008
Inlägg: 154
objx objx är inte uppkopplad
Medlem
 
Reg.datum: Mar 2008
Inlägg: 154
Problemet är väl den här typen av filkombinationer:
http://forums.jinx.com/topic.asp?TOPIC_ID=32319
objx är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-04-01, 21:38 #9
TonyL TonyL är inte uppkopplad
Medlem
 
Reg.datum: Sep 2008
Inlägg: 189
TonyL TonyL är inte uppkopplad
Medlem
 
Reg.datum: Sep 2008
Inlägg: 189
ok, tack.

/ Tony
TonyL är inte uppkopplad   Svara med citatSvara med citat
Svara

Taggar
farliga, filer, ladda upp


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 01:14.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017