---
title: "Skydda filer - tips & hjälp eftersökes!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/147475-skydda-filer-tips-hjälp-eftersökes"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "learn"
published: "2006-05-30T13:26:40.000Z"
updated: "2006-06-03T10:04:51.000Z"
replies: 25
views: 997
page: 1
pages: 2
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/147475-skydda-filer-tips-hjälp-eftersökes"
---

# Skydda filer - tips & hjälp eftersökes!

_Sida 1 av 2._

## #1 — learn, 2006-05-30T13:26Z

Jag har ett upload-system där jag vill skydda alla filer. Med skydda menar jag att man endast skall kunna nå filerna genom min sida. Därför läggs alla uppladdade filer i en mapp "filer" som ligger utanför rooten. Sedan så hämtar jag filerna mha ett php-script, fil.php:

```php
// Där filerna ligger
$mapp = '../filer/';

// Sökvägen
$filen = $mapp.$_GET['fil'];

$filtyp = explode('.',$_GET['fil']);
$filtyp = $filtyp [1];
		
// Filtyp
switch($filtyp ) {

case "avi":     $type = "video/x-msvideo";               break;
case "doc":     $type = "application/msword";            break;
case "jpg":     $type = "image/jpg";                     break;
case "jpeg":    $type = "image/jpg";                     break;
case "mp3":     $type = "audio/mpeg";                    break;
case "mpg":     $type = "video/mpeg";                    break;
case "mpeg":    $type = "video/mpeg";                    break;
case "pdf":     $type = "application/pdf";               break;
case "png":     $type = "image/png";                     break;
case "gif":     $type = "image/gif";                     break;
case "txt":     $type = "text/plain";                    break;
case "wav":     $type = "audio/wav";                     break;
case "zip":     $type = "application/x-zip-compressed";  break;
			
default:        $type = "application/force-download";    break;
}
		
// Öppna filen
header('Content-Type: '.$type);
header('Content-Disposition: attachment; filename="'.$_GET['fil'].'"');
header('Content-Length: '.filesize($filen));
readfile($filen);
```

För att visa/öppna en fil:

```
<img src="fil.php?fil=dokument.doc" />
```

Detta tänkte jag skulle räcka säkerhetsmässigt med tanke på att man inte kommer utanför rooten på egen hand... Sen kom jag på, det är ju bara för "boven" att skriva in adressen <https://www.minsida.com/fil.php?fil=dokument.doc> i webbläsaren...!

Hur ska jag göra för att skydda mina filer? Alla tips mottages med tacksamhet!

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

## #2 — Fuel, 2006-05-30T13:36Z

.htaccess ?

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

## #3 — learn, 2006-05-30T13:50Z

Jag har funderat på det jag också, men inte kommit på hur jag skall använda den... Tips, exempel?? Tack!

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

## #4 — The_Hulk, 2006-05-30T13:54Z

användarnamn och lösenord i PHP?
egentligen skulle det räcka med en kod/lösenord för att komma åt filen.
du får då ha ett forumlär där man skriver in lösenordet.

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

## #5 — learn, 2006-05-30T14:34Z

> **The_Hulk skrev:**
>
> användarnamn och lösenord i PHP?
> egentligen skulle det räcka med en kod/lösenord för att komma åt filen.
> du får då ha ett forumlär där man skriver in lösenordet.

Man ska inte behöva logga in... Vissa filer ska vara synliga för alla, men man ska behöva ha länken i mitt system för att komma åt dem.

Det där med .htaccess kanske kan vara något, men hur ska jag göra??

**R:** Hur menar du The_Hulk förresten? Vart skulle jag ha detta "lösenords-formulär"? Det går ju inte att placera det i fil.php, och har jag det inte där så kommer man ju åt fil.php utan lösenord... Tror du tänkte lite fel där.

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

## #6 — The_Hulk, 2006-05-30T17:35Z

Tror det ska fungera något åt detta hållet.
du kan även skicka med koden som en parameter till fil.php om du vill
fil.php?fil=document.doc&code=hemligt
skickar du inte med code så får man en ruta där man ska mata in koden.

```php
<?php
session_start();

if(isset($_REQUEST['code']) && $_REQUEST['code'] == "hemligt")
{
    // lägg din kod här om man matat in rätt kod.
    $fil = $_SESSION['fil'];
}
else
{
    $_SESSION['fil'] = $_REQUEST['fil'];
?>
<html>
<body>
<form action="fil.php" method="post">
Kod: <input type="password" name="code"> <input type="submit" value="Send">
</form>
</body>
</html>
<?php
}
?>
```

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

## #7 — The_Hulk, 2006-05-30T17:47Z

om du använder databas så man du även skicka med ett slumpmässigt ID med varje länk som är giltligt en viss tid. kanske slumpa fram det för varje länk eller för varje användare som surfar till din sida.

tänk på att detta medför att dina användare måste tillåta cookies.

skulle i och för sig fungera att skicka med ID till varje sida och på det sättet undvika cookies.

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

## #8 — learn, 2006-06-01T10:26Z

Nu har du väl fel The_Hulk. Jag kan inte stoppa in ett formulär i fil.php. Det ända fil.php får innehålla är bild-information, dvs en header efter som "anropet" sker direkt i \<img\>-taggen. Man kan inte visa ett formulär i en bild...om du förstår vad jag menar :)

Att dessutom skicka med ett lösenord mha "code=..." är ju inte så smart då lösenordet visas för besökaren (högerklick - visa källkod).

**Är det verkligen ingen på hela wF som vet hur man kan och brukar göra i dessa fall. På något sätt borde det ju gå att skydda sina filer...??**

Tack på förhand!

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

## #9 — Peeer, 2006-06-01T10:36Z

Se till så det sätts en session när folk surfar runt på dina sidor. Sen kontrollerar du om sessionen finns innan du skickar filen till besökaren i fråga.

Alternativt: <http://www.google.se/search?hl=sv&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=htaccess+hotlink&spell=1>

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

## #10 — learn, 2006-06-01T10:49Z

> **Peeer skrev:**
>
> Se till så det sätts en session när folk surfar runt på dina sidor. Sen kontrollerar du om sessionen finns innan du skickar filen till besökaren i fråga.
> 
> Alternativt: <http://www.google.se/search?hl=sv&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=htaccess+hotlink&spell=1>

Tack för din hjälp. Sessionen verkar inte hittas i filen fil.php. Följande funkar inte, bilden visas inte:

```php
<? $_SESSION['test'] = 'ok'; ?>

<img src="fil.php?fil=dokument.doc" />
```

 

```php
// Där filerna ligger
$mapp = '../filer/';

// Sökvägen
$filen = $mapp.$_GET['fil'];

$filtyp = explode('.',$_GET['fil']);
$filtyp = $filtyp [1];
        
// Filtyp
switch($filtyp ) {

.
.
.

}
        
// Öppna filen om säkerhets-session är satt
if ($_SESSION['test'] == 'ok') {

  header('Content-Type: '.$type);
  header('Content-Disposition: attachment; filename="'.$_GET['fil'].'"');
  header('Content-Length: '.filesize($filen));
  readfile($filen); 
}
```

**R:**
Är det här med .htaccess verkligen så smart/säkert?

```
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]
```

HTTP_REFERER innehåller väl inte alltid ngt och kan väl dessutom fejkas? Eller gäller det bara php's $\_SERVER\['HTTP_REFERER'\]?

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

## #11 — Peeer, 2006-06-01T11:08Z

Du måste ha session_start() **överst** på alla sidor!

```php
<?php
session_start();
$_SESSION['test'] = 'ok'; ?>

<img src="fil.php?fil=dokument.doc" />
```

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

## #12 — Peeer, 2006-06-01T11:09Z

> **learn skrev:**
>
> **R:**
> Är det här med .htaccess verkligen så smart/säkert?
> 
>
>
> ```
> RewriteEngine On
> RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
> RewriteCond %{HTTP_REFERER} !^$
> RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]
> ```
>
> 
> 
> HTTP_REFERER innehåller väl inte alltid ngt och kan väl dessutom fejkas? Eller gäller det bara php's $\_SERVER\['HTTP_REFERER'\]?

Nej det är inte helt säkert, men det stoppar en hel del. Jag hade kört på sessionkontrollen.

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

## #13 — The_Hulk, 2006-06-01T11:37Z

Vad jag menade var att när man försöker komam åt bilden utan att ha matat in koden så kommer man till ett forumlär där man ombeds att skriva in koden.
formuläret kommer inte i bilden eller något dokument.
fil.php kan returnera vad som helst. jag hade markerat var du skulle lägga in din kod för att ta hand om själva skickandet av dokumentet/bilden till användaren. det är nog inget fel i lösningen men tydligen inte riktigt det du ville ha.

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

## #14 — learn, 2006-06-01T11:53Z

> **Peeer skrev:**
>
> Du måste ha session_start() **överst** på alla sidor!
>
>
> ```php
> <?php
> session_start();
> $_SESSION['test'] = 'ok'; ?>
> 
> <img src="fil.php?fil=dokument.doc" />
> ```

Ah, dumma mig...   :p 

Tack för tipset! En fråga bara: går det inte att spåra vilka sessioner som sätts på en webbsida man besöker..??

Fler tips, ngn?

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

## #15 — Peeer, 2006-06-01T12:19Z

> **learn skrev:**
>
> En fråga bara: går det inte att spåra vilka sessioner som sätts på en webbsida man besöker..??

Nja, värdet på sessionerna ligger enbart på webbservern, däremot så lagras oftast ett sessionID hos klienten i en cookie (sessionIDt kan ligga i sökvägarna också). Värdet på sessionIDt går att förfalska, men för att man ska ha någon nytta av det så måste man veta/gissa sig fram till vad någon annan besökare har för sessionID (för att på så sätt kapa dennes session).

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

## #16 — learn, 2006-06-01T12:26Z

Ok, och detta är komplicerat hoppas jag...?

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

## #17 — The_Hulk, 2006-06-01T12:29Z

Vill man förbättre säkerheten med sessionid kan man även spara IP-nummret från personen. $\_SERVER\['REMOTE_ADDR'\], du kanske även kan hitta ltie mer information här: <http://se2.php.net/reserved.variables>

komplicerat att ändra sessionid eller att gissa någon annans?

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

## #18 — learn, 2006-06-01T12:50Z

> **The_Hulk skrev:**
>
> Vill man förbättre säkerheten med sessionid kan man även spara IP-nummret från personen. $\_SERVER\['REMOTE_ADDR'\], du kanske även kan hitta ltie mer information här: <http://se2.php.net/reserved.variables>

Låter intressant. Hur exakt menar du? Kan du ge ett litet exempel? Tack!

> **The_Hulk skrev:**
>
> komplicerat att ändra sessionid eller att gissa någon annans?

Båda (komplicerat/svårt)?

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

## #19 — Peeer, 2006-06-01T17:02Z

> **learn skrev:**
>
> Ok, och detta är komplicerat hoppas jag...?

Det krävs lite kunskap för att byta sessionid, men det svåra är inte att byta, utan att kunna gissa sig fram till ett annat giltigt.

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

## #20 — learn, 2006-06-01T17:18Z

> **Peeer skrev:**
>
> Det krävs lite kunskap för att byta sessionid, men det svåra är inte att byta, utan att kunna gissa sig fram till ett annat giltigt.

Ok, vad kan jag mer göra för att få det så säkert som möjligt?

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

---

Tråden på webben: https://www.webforum.nu/amne/php/147475-skydda-filer-tips-hjälp-eftersökes  
Nästa sida: https://www.webforum.nu/amne/php/147475-skydda-filer-tips-hjälp-eftersökes/page2.md
