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:
// 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!
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.
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.
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
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
}
?>
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.
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...??
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.
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.
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.
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).
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?
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?