Avatar billede alex15 Nybegynder
30. juli 2009 - 12:10 Der er 14 kommentarer og
1 løsning

Hvordan beskyttes man filer fra uvedkommende på en server mappe

Hej eksperter,

Lige nu kan man gå ind på min side og hente et billede ved at taste:

minside.dk/billeder/1.jpg

Er det muligt og fjerne denne adgang, så folk udefra ikke blot kan indtaste sig adgang til mine filer?

Er der derefter også muligt at sørge for at brugere inde på siden kan skabe sig adgang til de pågældende filer? og få lov til at downloade dem?

Går ud fra at det har noget med .htaccess at gøre...

Alex
Avatar billede showsource Seniormester
30. juli 2009 - 12:23 #1
Ja, som du selv skriver, er htaccess et oplagt valg.

En .htaccess kunne se så'n ud:

AuthType Basic
AuthName "Restricted"
AuthUserFile /var/www/.htpass
Require valid-user


Stien til filen ".htpass" skal jo så ændres så det passer til dit host.

Indholdet af filen ".htpass" kunne ex. vis være:

showsource:$apr1$u7QgNqZ4$jZf3e9htzLbP4A5QbTVBL1

Her er brugernavn showsource, og password showsource.
Men den er lavet på en windåze, og på en unix ser den så'n ud:
( lavet på http://freebsd.azero.dk/ )

showsource:$1$b1214845$DhItnt3.yR8459uQX8IfC/
Avatar billede alex15 Nybegynder
30. juli 2009 - 12:32 #2
Okay ja, men det kræver så at hver enkel bruger har hver sin bruger inde i htpass ikke?

Lige nu har brugeren hver sin bruger inde i min database. Og når han så logger ind på han tildelt et unik ID, som så bliver tjekket hver gang personen går rundt på siden, for at sikre at det er den rette person som er inde på siden, selv for at sikre mod sessions hackking.

Man kan ikke bare gøre at al adgang til at alle filer i en mappe bliver afvist, med mindre personen henter den pågældende fil igennem en .php fil?
Avatar billede showsource Seniormester
30. juli 2009 - 12:38 #3
Jow da:

    Order deny,allow
    deny from all

Så kan man ikke tilgå det dir/underdir som .htaccess ligger i.
Men et php script kan sagtens hente indholdet.
Avatar billede alex15 Nybegynder
30. juli 2009 - 12:41 #4
Okay, det ville self være den mest optimale løsning og benytte sig af. Men går ud fra at den vil komme med en eller anden form for fejl når man så prøver at hente filen.

Hvordan sørger man for selv at kunne bestemme indenholdet af denne fejl?

Endvidere... Hvis jeg ligger denne .hyaccess fil i mappen:

minside.dk/billeder

Så vil alle undermappe også være tilknyttet denne .htaccess fil, ikke?

Altså alle filer mv. kan kun tilgås via et php script?

Alex
Avatar billede Slettet bruger
30. juli 2009 - 12:41 #5
Sørg for at folk ikke kan komme ind til filen med en .htaccess fil, og giv dem så adgang med en .php fil som henter og viser indholdet af filen.

PHP filen kunne f.eks. se således ud:
<?php
header('Content-type: image/jpeg'); //Fortæl browseren at du sender et billede.
$billede = file_get_contents('billeder/1.jpg'); //Hent billedet.
echo $billede; //Send det.
?>

Så behøver brugeren ikke at kende noget password.
Avatar billede alex15 Nybegynder
30. juli 2009 - 12:49 #6
"Sørg for at folk ikke kan komme ind til filen med en .htaccess fil".

Hvordan skal jeg gøre dette?
Avatar billede Slettet bruger
30. juli 2009 - 13:07 #7
Var der ikke nogle der skrev det lidt længere oppe?

showsource:
    Order deny,allow
    deny from all
Avatar billede alex15 Nybegynder
30. juli 2009 - 13:17 #8
Sådan, nu har jeg i hvert fald fået fjernet adgang til de pågældende filer i de forskellige mapper.

Nu vil jeg gerne have lavet en knap som gør at hvis jeg venstre klikker på den, så går den autoamtisk ind og downloader (Samme der sker når man højre klikker og derefter trykker 'Gem link som...' på MAC) den pågældende fil. Om det så er Word, Excel eller PDF.

Går ud fra at det skal se nogenlunde således ud:

<a href="hent_fil.php">Hent word fil</a>

Men hvordan skal hent_fil.php så se ud? Sådan her:

<?php
header('Content-disposition: attachment; filename=word.doc');
header('Content-type: application/msword');
readfile('word.doc');
?>

Eller hvordan skal den se ud?
Avatar billede Slettet bruger
30. juli 2009 - 13:50 #9
Næsten, sådan her er fint:

<?php
header('Content-disposition: attachment; filename=word.doc');
readfile('word.doc');
?>

Du behøver ikke en Content-type når du alligevel beder klienten om at downloade filen, men der sker heller ikke noget ved at have den.
Avatar billede Slettet bruger
30. juli 2009 - 13:56 #10
Sådan her virker den med alle filtyper, og uden at afsløre deres placering:

<?php
$filSti = "word.doc"; //Kan sættes dynamisk, fra database eller lign.
$filNavn end(explode("/", $filSti); //Fjern stien til filen.
header('Content-disposition: attachment; filename=$filNavn');
readfile('$filSti');
?>
Avatar billede alex15 Nybegynder
30. juli 2009 - 14:01 #11
Okay, nu fungere det næsten ...

Problemet er bare at når jeg skriver følgende kode:

<?php
header('Content-disposition: attachment; filename=billeder/word.docx');
readfile('billeder/word.docx');
?>

Så den filen korrekt, problemet er bare at den gemmer filen med følgende navn:

'billeder_word.docx'.

Er det ikke muligt og få den til at gemme filen blot med 'word.docx'?
Avatar billede alex15 Nybegynder
30. juli 2009 - 14:05 #12
Det var lige det som jeg endte efter, den kommer blot med følgende fejl:

"Parse error: syntax error, unexpected T_STRING in /var/www/sites/demomitbarn.dk/foto_billede_test.php on line 3"

Har tilføjet et manglende ')' til koden, men virker stadigvæk ikke, kan du finde fejlen?
Avatar billede alex15 Nybegynder
30. juli 2009 - 14:32 #13
Sådan ...

Så kan det til at virke korrekt ... Der skulle lige tilsættes = ) samt ". Så virkede det ...

<?php
$filSti = "test/word.docx"; //Kan sættes dynamisk, fra database eller lign.
$filNavn = end(explode("/", $filSti)); //Fjern stien til filen.

header('Content-disposition: attachment; filename='.$filNavn.'');
readfile("$filSti");
?>

Tak for hjælpen.

Smider i lige et svar, så får i deres point.

Forsat go dag :)
Avatar billede Slettet bruger
30. juli 2009 - 17:10 #14
Glad for at det lykkedes :)
Avatar billede alex15 Nybegynder
05. august 2009 - 14:32 #15
Her kommer dine point.
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