28. august 2002 - 00:34Der er
11 kommentarer og 2 løsninger
Forhindre læsning af billed-filer fra et katalog uden om websiden
Hej eksperter.
Jeg vil høre om nogle har et forslag til, hvordan jeg løser flg. problem vha. af htaccess til Apache.
Jeg har et website med brugerprofiler, hvor der er knyttet personlige billeder til. Man skal logge ind på siden for at kunne se brugerprofilerne. Billederne navngiver jeg efter profilens ID, for lettere at kunne overskue dem i den mappe de ligger i. Et billede kan derved have flg. navn og sti: /pics/123.jpg
Kan det lade sig gøre vha. htaccess at forhindre personer, der ikke er logget ind, i at se billederne bare ved at gætte sig frem til filnavnene og indtaste dem som en url? Altså kun at tillade læsning af filerne, hvis de tilgås fra fx. en php-side?
Jeg kunne også delvist løse det ved at navngive filerne med en lang tilfældig streng, men jeg syntes en htaccess løsning er mere korrekt (og eksotisk :)
ps. jeg er ny på eksperten.dk og ikke helt inde i værdien af points, så hvis der skal flere til, må I lige sige det.
det, du ønsker kan ikke umiddelbart lade sig gøre ved hjælp af .htaccess.
en bedre metode, ville være at lade php stå for serviceringen af billedfilen (læse den raw på serveren og outputte den raw med header til klienten)... dermed kan du få dit php-script til at kontrollere, om brugeren er logget ind...
antallet af point er fint, måske en anelse højt, men det varierer fra person til person, hvor mange point, der skal til, før de er noget værd... personligt skal jeg have en milliard million point... og de er stadig intet værd for mig... kunne jeg bare få min point vekslet til 1 kroner, så var jeg en glad mand...
husk, at du ikke behøver at acceptere eller afvise mit svar, før du har ventet lidt og set, om der kommer et svar der er bedre... der er heller ikke noget i vejen for at dele antallet af point ud til flere forskellige svar. Husk dog at lukke spørgsmålet (acceptere et svar, eventuelt dit eget) inden alt for lang tid... (en måneds tid er længe synes jeg...)
Hvis du lavet et bibliotek som er uden for webscoopet, og lægger billederne der i. Så laver du en php-fil der ser nogenlunde sådan her ud:
<?php if($bruger_logget_ind && !ereg('[\/]', $pic)) { header("content-type: image/jpg"); readfile('/sti/til/billederne/'.$pic); } else { //Bruger har ikke logget ind, fyr en eller anden fejlmeddelse af! } ?>
thomasledet> Hvorfor mener du ikke det kan lade sig gøre med .htaccess? Hvis pic biblioteket ligger som et underbibliotek til biblioteket med .htaccess filen vil dette bibliotek kun kunne tilgås fra personer som har logget ind. Hvis de ikke er logget ind vil de få en popup og ved forkert kombination af bruger og password vil de få en not authorizied.
svoeber> De skal ikke ligge som BLOB i databasen... man har aldrig billeder liggende direkte i databasen - det er simpelthen for sløvt og for ressourcekrævende. De du i stedet kan gøre, er at have adressen til dine billeder til at ligge i databasen som hamsterdance også anbefaler.
benny.dk> hvad snakker du om? Den løsning du anbefaler er direkte tåbelig, taget i betragning, at jeg går ud fra, at det i forvejen er en form for php-løsning, der står for det såkaldte login af brugere. Desuden tror jeg at svoeber ønsker en service, der er lidt mere flydende og dynamisk end brug af .htaccess.
.htaccess er kun brugbar i forbindelse med fx phpMyAdmin, hvor jeg også vil mene, at den kun har begrænset brugbarhed. .htaccess er noget møg - verificering af brugere og hvad de har adgang til bør være indbygget i dit site og ikke i .htaccess.
.htaccess kna til nød bruges, hvis det drejer sig om nogle filer, som det kun er nogle enkelte kammerater, man ønsker at give adgang til fx en bunke billeder. Men sådan som jeg forstår dette her, er det er lidt større site, hvor disse billeder er en del af den daglige brug og skal tilgåes seamlessly fra andre php-filer...
>benny.dk Jeg bruger ikke .htaccess til brugerlogin og kan derfor heller ikke begrænse adgang til billeder på denne måde. Jeg bruger i stedet et PHP-script baseret på sessions til at styre brugeradgangen. Det giver en del fordele fremfor htaccess, fx.: - Jeg kan selv bestemme grænsefladen i login-boxen. - Jeg kan tilbyde automatisk login på baggrund af cookies. - Man kan logge ud via en knap. - Det er en del nemmere ikke at arbejde med brugere og passwords i en htpassword fil.
Jeg ville med mit spørgsmål gerne høre, om der blandt apaches mange avancerede funktioner til htaccess var en mulighed for at sige: "Vis kun billed-filer fra denne mappe, hvis det er en webside på denne server, der viser billedet"
Jeg har ikke selv eksperimenteret med det, men har ladet mig fortælle at det er muligt på et bibliotek at alve en allow hvor man benytter sig af refere variablen og den skal jo så være ens eget site.
Men ved ikke hvordan det skal sættes op, desværre, men hvis jeg løber ind i ham som fortalte mig at han eksperimenterede med det, skal jeg nok spørge
Jeg har nu selv snuset lidt til en metode med referer variablen, men her mødte jeg to problemstillinger. 1) Variablen skulle vist kunne forfalskes, hvis man ved hvordan (jeg gør ikke :) 2) Nogle brugere bag en proxy-server vil ikke sætte en korrekt referer-variabel, og vil derfor ikke se noget, selv om de burde have lov.
Jeg tror jeg vil hælde mod at gøre det med Hamsterdance/Thomasledet's metode, selvom det alligevel ikke er i htaccess.
referer-variablen kan uhyre let forfalskes... læs lidt om http-protokollen på http://www.w3c.org og du vil erfare, at enhver faktisk kan gøre det med et så simpelt program som telnet.
benny.dk> jeg kender htaccess ganske godt... og især godtnok til at kende dens svagheder og mangler... jeg vil mene at htacces (som svoeber også har konkluderet) ikke er det rette værktøj til denne situation.
Jeg leger videre med PHP-løsningen og takker for svaret fra Hamsterdance og Thomasledet
Synes godt om
Ny brugerNybegynder
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.