Filsikkerhed

Tags:    php

Hey Udviklere.

Jeg er ved at lave et system i php hvor en bruger der er logget ind kan uploade en fil. Mit problem er at denne fil skal beskyttes så man kun kan se den når man er logget ind. Jeg har tænkt over nogle forskellige løsninger men ingen af dem er gode nok.
Man kunne ligge filen langt nede i et kryptisk mappesystem, så er chancen for at nogle finder den næsten 0, men så kan man jo stadig give linket videre hvis man har haft adgang til den 1 gang og hente filen uden at være logget ind, så det er altså en meget dårlig ide. Har også tænkt på om man kunne smide filens indhold ind i MySQL databasen, for så har man da kontrol over hvem man vil vise indholdet til, men min udbyder giver kun 20Mb database, så det er også en dårlig løsning. Så jeg ville blive glad hvis der var nogle der havde en god ide der kan hjælpe mig her... Kunne man evt bruge noget chmod indstillinger og hente indholdet med php?


På forhånd tak!
Mobster
www.interactive.dk



5 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Hvis udbyderen kører Apache, så kan du læse om at beskytte dine filer her:

http://mbn.dk/?aid=6&lang=dk




/AC




Jeg ville dele problemet er op to dele.
1) Vi skal sikre os at brugeren kun at se sine egne filer
2) Vi skal fysisk lagre filerne - og eventuelt givet dem til brugeren

1) Ville jeg bruge mysql til. Forstil dig en tabel der indeholder f.x: id, ejer, filnavn, mime-type .. etc.

Hvis brugeren så uploader et jpeg, så vil vi have en række:
id=1, ejer=dennis, filnavn=homepage.jpg, mime-type=image/jpeg

Når vi skal så lave webinterface, og brugeren skal have vist sine filer, så checker du om brugeren er logget ind og selecter du bare hvor ejer=<brugernavn> .. Indtil videre har du ikke eksponeret din rigtig fil.

2) Selve filen gemmes i et directory (som man ikke skal kunne se fra webserveren). F.eks kan du overveje at rename dem til id-nummeret på den række i tabllen du har lavet tilsvarende. På den måde får du ikke problemer med, at to uploader en fil med samme filnavn, da den ene vil f.x hedde 1 og den anden 2.

Når brugeren skal kunne se/hente filen, skal du bruge dit id fra tabellen. Så han kalder f.x get.php?id=1

- Først chekker du om brugeren har ret til at se filen. Dette gøres via tabellen
- Så selecter du mime-type. (image/jpeg)
Dernæst outputter du headers (baseret på mime-type, evt cache-headers)
Og afslutningsvis bruger du fopen/fpassthru til at sende filen.

Nu er brugeren
Dennis Møllegaard Pedersen
http://dennis.moellegaard.dk



Hey Udviklere.

Jeg er ved at lave et system i php hvor en bruger der er logget ind kan uploade en fil. Mit problem er at denne fil skal beskyttes så man kun kan se den når man er logget ind. Jeg har tænkt over nogle forskellige løsninger men ingen af dem er gode nok.
Man kunne ligge filen langt nede i et kryptisk mappesystem, så er chancen for at nogle finder den næsten 0, men så kan man jo stadig give linket videre hvis man har haft adgang til den 1 gang og hente filen uden at være logget ind, så det er altså en meget dårlig ide. Har også tænkt på om man kunne smide filens indhold ind i MySQL databasen, for så har man da kontrol over hvem man vil vise indholdet til, men min udbyder giver kun 20Mb database, så det er også en dårlig løsning. Så jeg ville blive glad hvis der var nogle der havde en god ide der kan hjælpe mig her... Kunne man evt bruge noget chmod indstillinger og hente indholdet med php?


På forhånd tak!
Mobster
www.interactive.dk


Hej

Jeg har selv lavet et sådan upload system. For at sikre at andre ikke kunne hente filerne, placerede jeg dem uden for den offentlige mappe. filuploaderen lavede så selv en ny mappe (uden for den offentlige) hver gang der var en ny bruger oprettede en konto. I denne mappe blev alle brugerens filer gemt.

MVH
Groyk.dk
Simon Madsen

[Redigeret d. 28/01-04 19:45:27 af Simon Madsen]




Ah ja, det glemte jeg at sige. Det directory filerne ligger i, må ikke være tilgængelig via apache.

Dennis Møllegaard Pedersen
http://dennis.moellegaard.dk



Hvis du har fået svar på din post så vær venlig at lukke den.

-----------------------------------------------------------------------------

»»Mark S. Johansen



t