Avatar billede manon Nybegynder
19. januar 2002 - 11:02 Der er 19 kommentarer og
1 løsning

Kræv password inden dwload af en fil (ditdat.zip) på server?

(server understøtter php, mysql)

Mit spørgsmål er kort:
Hvordan og hvorledes beskytter man en fil (eks. ditdat.zip) på ens server så det kun er dem der har et kodeord som kan dwloade den? Ellers sagt på en anden måde - at der afkræves et brugernavn og kodeord for at dwloade filen.

Filen skal evt. kunne hentes via et link på en ganske alm. PHP/HTML side hvor der afkræves brugerlogin for at hente filen, men hvis man kender det direkte link så kan man jo omgås denne regel/kode!

Desuden - kan søgerobotterne finde den filen \"ditdat.zip\" selvom den er gemt bag en kode eks. i en mappe?

Håber i kan svare på mit spm.
Avatar billede speedy Nybegynder
19. januar 2002 - 11:23 #1
Jeg har lavet et lille PHP-script som du måske kan bruge. Lad os sige at du kalder scriptet hentfil.php

Så skal du linke til den på denne måde: hentfil.php?file=ditdat.zip

Så beder den dig om kodeord for at kunne hente filen. Du skal så lægge alle de password-beskyttede filer i en mappe som i dette tilfælde hedder \"hemmeligefiler\"

Søgemaskinerne finder IKKE filer som ikke bliver linket til. Og direkte links undgår du bare, og så er det problem løst.


<?   
    if ($password != \"monsterhemmeligtkodeord\"){
        $error = \"<form action=\\\"\\\" method=\\\"post\\\">Adgangskode: <input type=\\\"password\\\" name=\\\"password\\\"></form>\";
        die($error);
    }
    if (file_exists(\"hemmeligefiler/$file\")) {
        $filesize = filesize(\"files/$file\");
        header(\"Content-Disposition: attachment; filename=$file\");
        header(\"Content-Description: Bare hent $file den er god :)\");
        header(\"Content-Length: $filesize\");
        header(\"Content-Type: application/zip\");
        $file = fopen(\"hemmeligefiler/$file\", \"r\");
        fpassthru($file);
    } else {
        echo \"Filen <b>$file</b> findes ikke.\";
    }
?>


/SpEeDy
Avatar billede planetdb Nybegynder
19. januar 2002 - 11:26 #2
Prøv måske dette, ret simpelt..
=================================================

<html>
<body>

<form method=\"post\" action=\"?password=check&download=file\">
<input type=\"text\" name=\"pass\">
<input type=\"submit\" value=\"Ok\">
</form>

<?php

if (($password == \"check\") && ($download == \"file\")) {
if ($pass == \"dit_password\") {
echo \"<a href=\\\"ditdat.zip\\\">Link</a>\"

  }
  else {

echo \"Forkert password, gå tilbage!\";

  }
}
?>

</body>
</html>
Avatar billede speedy Nybegynder
19. januar 2002 - 11:26 #3
og en lille forbedret udgave med lettere configuration har du her:

<?   
    //Config
    $mappe = \"hemmeligefiler\";
    $adgangskode = \"monsterhemmeligtkodeord\";

    if ($password != $adgangskode){
        $error = \"<form action=\\\"\\\" method=\\\"post\\\">Adgangskode: <input type=\\\"password\\\" name=\\\"password\\\"></form>\";
        die($error);
    }
    if (file_exists(\"$mappe/$file\")) {
        $filesize = filesize(\"files/$file\");
        header(\"Content-Disposition: attachment; filename=$file\");
        header(\"Content-Description: Bare hent $file den er god :)\");
        header(\"Content-Length: $filesize\");
        header(\"Content-Type: application/zip\");
        $file = fopen(\"$mappe/$file\", \"r\");
        fpassthru($file);
    } else {
        echo \"Filen <b>$file</b> findes ikke.\";
    }
?>

/SpEeDy
Avatar billede speedy Nybegynder
19. januar 2002 - 11:28 #4
planetdb>>Med din metode afsløres den direkte sti til filen når password er indtastet.

/SpEeDy
Avatar billede planetdb Nybegynder
19. januar 2002 - 11:31 #5
Gjorde det da noget??...Kiggede bare lige forbi og så overskriften..:o)
Avatar billede speedy Nybegynder
19. januar 2002 - 11:36 #6
tjaa...han skrev at man ikke bare måtte kunne se den direkte sti.
Avatar billede manon Nybegynder
19. januar 2002 - 11:45 #7
planetdb >>
tak for dit indslag, men som seedy også siger, så må man ikke kunne se/hente den ved brug af den direkte sti.
Avatar billede manon Nybegynder
19. januar 2002 - 11:47 #8
speedy >>
jeg er ikke hardcore til php, så du må lige være lidt tålmodig med mig *s*

Er det korrekt opfattet at jeg skal bruge det script du svarede med kl. 11:26:59  ?? Og glemme det andet?
Avatar billede speedy Nybegynder
19. januar 2002 - 11:49 #9
manon>>jeps. det er rigtigt.

Spørg bare løs hvis du ikke kan få det til at køre.

/SpEeDy
Avatar billede speedy Nybegynder
19. januar 2002 - 11:50 #10
Og så skal du bare ændre disse 2 linier:
    $mappe = \"hemmeligefiler\";
    $adgangskode = \"monsterhemmeligtkodeord\";

Så de passer til hvilket kodeord du vil bruge og i hvilken mappe du lægger filerne.

/SpEeDy
Avatar billede manon Nybegynder
19. januar 2002 - 12:05 #11
speedy >
er dette så korrekt? skal den have hele stien?

$mappe = \"http://www.domænet.dk/zipfiler/ditdat.zip\";
$adgangskode = \"det_hemmelige_kodeord\";


Er det korrekt opfattet at scriptet kun gælder for ditdat.zip og hvis jeg har flere \"zip\" filer, så skal jeg kører dette script flere gange?

Eks. har jeg i mappen \"../zipfiler/\" flere filer som kræver afgangskode, både \"diddat.zip og simsam.zip og dimdum.zip\".

Avatar billede speedy Nybegynder
19. januar 2002 - 12:10 #12
nej, lad os sige at du har filen med scriptet i som du kalder hentfil.php

Så skal det være
$mappe = \"zipfiler\";

Og så lægger du alle dine zip-filer i mappen zipfiler og du kan så linke til hentfil.php på denne måde:

<a href=\"hentfil.php?file=ditdat.zip\">Hent ditdat.zip</a><br>
<a href=\"hentfil.php?file=simsam.zip\">Hent simsam.zip</a><br>
<a href=\"hentfil.php?file=dimdum.zip\">Hent dimdum.zip</a><br>

/SpEeDy
Avatar billede speedy Nybegynder
19. januar 2002 - 12:11 #13
eller
Så skal det være
$mappe = \"../zipfiler\";

$mappe skal sættes i forhold til hvor hentfil.php
ligger.

/SpEeDy
Avatar billede manon Nybegynder
19. januar 2002 - 12:18 #14
ahaaa....
Avatar billede manon Nybegynder
19. januar 2002 - 12:24 #15
speedy >>

spm: den her linie

[header(\"Content-Type: application/zip\");]

hedder den \"application/zip\" fordi vi snakker om zip filer eller hvad nu hvis der er pdf/exe/bat filer jeg ønskede at have kode på? Er det så stadig den samme?
Avatar billede speedy Nybegynder
19. januar 2002 - 12:31 #16
grunden til at jeg har sat den linie ind er at browseren tror at filen er en zip-fil, og derved vil den downloade den. Hvis du linker til et jpg-billede f.eks. vil billedet normalt blive åbnet i browseren, men da browseren tror at billedet er en zip-fil bliver brugeren spurgt om han/hun vil downloade filen.

Så du skal bare lade linien være ligegyldigt hvilke filer du vil have der kan downloades.

Hvis du fjerner den virker det også. Men så åbner den som sagt jpg-filer i browseren. Men det er jo op til dig hvordan du vil have det skal virke

/SpEeDy
Avatar billede manon Nybegynder
19. januar 2002 - 12:54 #17
oki *s* er fuld i gang med at teste det *s*
Avatar billede manon Nybegynder
19. januar 2002 - 13:23 #18
speedy >>
virker perfekt, thanx

men hvor sikkert er det system?
Vil andre nogensinde kunne finde/se \"ditdat.zip\" enten vha. søgemaskiner eller andet?
Avatar billede speedy Nybegynder
19. januar 2002 - 13:40 #19
nej, hvordan skulle en søgemaskine kunne finde ud af at der ligger en fil i en eller anden mappe du aldrig linker til eller fortæller om.

Så jeg vil mene at det er meget sikkert.

/SpEeDy
Avatar billede manon Nybegynder
19. januar 2002 - 13:42 #20
oki *s*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester