Du får kolla vilken mimi-type filen har och godkänna vilka som ska kunna laddas upp.
$mime = $_FILES['userfile']['type'];
if($mime=="image/jpeg" || $mime=="image/pjpeg") {
// bilden är en jpg och får laddas upp
// kör kod här som sparar filen på servern
} else {
echo "otillåten fil.";
}
getimagesize funkar ju bara på bilder, och vi vet ju inte om han vill kunna ladda upp andra sorters filer också.
Vad menar du med att $_FILES['userfile']['type'] sätts av klienten?
getimagesize funkar ju bara på bilder, och vi vet ju inte om han vill kunna ladda upp andra sorters filer också.
Vad menar du med att $_FILES['userfile']['type'] sätts av klienten?
Det var bara ett exempel. Det finns andra sätt att ta fram övriga mime-types.
"$_FILES['userfile']['type']
The mime type of the file, if the browser provided this information. An example would be "image/gif". This mime type is however not checked on the PHP side and therefore don't take its value for granted. "
Det var ett par "hackers" som utnyttjade detta för en tid sedan mot en rad svenska communityn. De laddade upp php-skript genom att manipulera fil-typen som webbläsaren sätter vid uppladdning.
getimagesize funkar ju bara på bilder, och vi vet ju inte om han vill kunna ladda upp andra sorters filer också.
Vad menar du med att $_FILES['userfile']['type'] sätts av klienten?
Hade faktiskt tänkt att tillåta txt, doc och pdf filer :)
$fil = explode (".", $fil); //Splittar upp filen som personen ska laddas upp.
if ($fil[1]=='txt' OR $fil[1]=='doc' OR $fil[1]=='pdf')
{
Fortsätt med koden som laddar upp bilden.
}else{
echo "Denna filtyp är ej tillåten";
exit();
}
Så skulle jag göra. men det verkar finnas simplare lösningar:P
$fil = explode (".", $fil); //Splittar upp filen som personen ska laddas upp.
if ($fil[1]=='txt' OR $fil[1]=='doc' OR $fil[1]=='pdf')
{
Fortsätt med koden som laddar upp bilden.
}else{
echo "Denna filtyp är ej tillåten";
exit();
}
Så skulle jag göra. men det verkar finnas simplare lösningar:P
Det är ett sätt som jag inte rekommenderar ur säkerhetssynpunkt.
Om jag har en exe fil som jag döper till minfil.txt.exe så kommer jag att kunna ladda upp den utan några problem eftersom skriptet tror att det är en textfil.
Dock så går det väl inte att exekvera tex en exe eller php på en webbserver om filen har filändelsen .txt?
Döper du om en .php fil till .txt så tolkar inte servern den som php utan visar bara själva koden i din webbläsare.
Så huvudsaken är inte vad det är för mimetyp utan vilken filändelse den har.
Nej, men jag förstår inte varför man ska ta några chanser.
Om jag t.ex vill godkänna Worddokument så är det väl bättre att kolla att mime är application/msword och inte släppa igenom mime application/octet-stream som bla exe-filer har?
Mime ändras ju inte även om man döper om filen till en annan filändelse.
Vad det är för mimetyp går att manipulera så därmed är den kontrollen inte speciellt intressant.
Och vilken skada skulle kunna uppstå pga av någon laddar upp en .exe omdöpt till .txt?
Men visst...bäst att ta det säkra före det osäkra och kolla både filändelse och MIME.
Ok, visste inte att det gick att manipulera mime. Har inte hört talas om det innan.
När jag har testat att döpa om filer så har de haft kvar rätt mime, men det finns kanske något sätt att ändra det på.