---
title: "Säkerhet vid uppladdningsformulär"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/152918-säkerhet-vid-uppladdningsformulär"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "rille31"
published: "2006-10-24T15:23:35.000Z"
updated: "2006-10-31T15:40:13.000Z"
replies: 19
views: 894
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/152918-säkerhet-vid-uppladdningsformulär"
---

# Säkerhet vid uppladdningsformulär

## #1 — rille31, 2006-10-24T15:23Z

Har gjort ett formulär för uppladdning och skulle behöva lite tips angående säkerheten, vad ska man tänka på?

Hur ska man undvika att folk laddar upp körbara filer?

Permalänk: https://www.webforum.nu/p/152918

## #2 — Pedda, 2006-10-24T16:14Z

Du får kolla vilken mimi-type filen har och godkänna vilka som ska kunna laddas upp.

```php
$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.";
}
```

Permalänk: https://www.webforum.nu/p/1887000

## #3 — stevenet, 2006-10-24T22:32Z

$\_FILES\['userfile'\]\['type'\] sätts av klienten, det är därför dumt att förlita sig på det värdet. För att läsa av filtyp på bilder kan man t.ex. använda sig av: <http://se2.php.net/manual/en/function.getimagesize.php>

Permalänk: https://www.webforum.nu/p/1887139

## #4 — Pedda, 2006-10-24T22:35Z

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?

Permalänk: https://www.webforum.nu/p/1887141

## #5 — stevenet, 2006-10-24T22:49Z

> **Pedda skrev:**
>
> 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.

Permalänk: https://www.webforum.nu/p/1887144

## #6 — rille31, 2006-10-25T07:26Z

> **Pedda skrev:**
>
> 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  :)

Permalänk: https://www.webforum.nu/p/1887196

## #7 — tha_neo, 2006-10-25T22:53Z

$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

Permalänk: https://www.webforum.nu/p/1887484

## #8 — Pedda, 2006-10-26T06:33Z

> **tha_neo skrev:**
>
> $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.

Permalänk: https://www.webforum.nu/p/1887507

## #9 — tha_neo, 2006-10-26T11:18Z

det var iofs väldigt sant!:) men gör en counter o räkna hur många element som finns i den o sen kontrollera sista elementet?

Permalänk: https://www.webforum.nu/p/1887582

## #10 — Peter S, 2006-10-26T11:27Z

Använd regex:

```php
if (preg_match("/\.(?:txt|doc|pdf)$/i", $fil)){
  // ok!
}
```

Permalänk: https://www.webforum.nu/p/1887583

## #11 — Pedda, 2006-10-26T11:42Z

Problemet kvarstår ju dock om man döper om virus.exe till virus.txt så släpps den igenom.

Permalänk: https://www.webforum.nu/p/1887588

## #12 — Blixtsystems, 2006-10-26T16:28Z

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.

Permalänk: https://www.webforum.nu/p/1887667

## #13 — Pedda, 2006-10-26T16:47Z

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.

Permalänk: https://www.webforum.nu/p/1887682

## #14 — Blixtsystems, 2006-10-26T17:53Z

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.

Permalänk: https://www.webforum.nu/p/1887708

## #15 — Pedda, 2006-10-26T17:57Z

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å.

Permalänk: https://www.webforum.nu/p/1887712

## #16 — rille31, 2006-10-31T13:58Z

Ok, så det är alltså bäst att kolla både filändelse samt mime typ?

Först kolla filändelsen
Om det stämmer kollar man mimetypen
Om det stämmer laddas bilden upp

så scriptet blir ungefär så här (förutom lite error meddelanden man kan lägga till)

```php
$fil = $_FILES['Filedata']['name'];
if (preg_match("/\.(?:txt|doc|pdf)$/i", $fil)){ 
  $mime = $_FILES['userfile']['type']; 
  if($mime=="image/jpeg" || $mime=="image/pjpeg") { 
     //move the uploaded file
     move_uploaded_file($_FILES['Filedata']['tmp_name'], "./files/".$_FILES['Filedata']['name']);
   }
}
```

Fast jag måste byta mimetypen till txt, doc och pdf.
Fast jag ingen aning om vad det är för mimetyp på dom filerna  :(

Permalänk: https://www.webforum.nu/p/1891840

## #17 — Pedda, 2006-10-31T14:07Z

> **rille31 skrev:**
>
> Fast jag måste byta mimetypen till txt, doc och pdf.
> Fast jag ingen aning om vad det är för mimetyp på dom filerna  :(

En lista på mime types:
<http://www.webmaster-toolkit.com/mime-types.shtml>

Permalänk: https://www.webforum.nu/p/1891843

## #18 — rille31, 2006-10-31T14:21Z

> **Pedda skrev:**
>
> En lista på mime types:
> <http://www.webmaster-toolkit.com/mime-types.shtml>

Tackar

Edit

Fick det inte att funka riktigt, mime typen verkar inte stämma

```php
$fil = $_FILES['Filedata']['name'];
if (preg_match("/\.(?:txt|doc|pdf)$/i", $fil)){ 
  //create the directory if doesn't exists (should have write permissons)
  //if(!is_dir("./files") mkdir("./files", 0755); 
  $mime = $_FILES['Filedata']['type']; 
  if($mime == "application/msword" || $mime == "text/plain" || $mime == "application/pdf") { 
    //move the uploaded file
	move_uploaded_file($_FILES['Filedata']['tmp_name'], "./files/".$_FILES['Filedata']['name']);
		}
}
```

Permalänk: https://www.webforum.nu/p/1891845

## #19 — Pedda, 2006-10-31T15:17Z

Testa att skriva ut mime för att se vad den heter.

Permalänk: https://www.webforum.nu/p/1891856

## #20 — rille31, 2006-10-31T15:40Z

testade med ett html formulär och koden funkade finfint:)

dock så funkar inte mime delen när jag kör mitt flashformulär fast det funkar utan den delen, skumt

nu vet jag iallafall vary man ska leta efter fel  :)

Permalänk: https://www.webforum.nu/p/1891860

---

Tråden på webben: https://www.webforum.nu/amne/php/152918-säkerhet-vid-uppladdningsformulär
