05. januar 2011 - 22:25Der er
15 kommentarer og 1 løsning
Beskyttelse af dokumenter i bestemt servermappe
Hejsa. Jeg har et login-system og har brug for et simpelt dokument-arkiv system, som der kun kan opnåes adgang til efter login.
Det drejer sig alene om PDF-dokumenter (mødereferater), som uploades via et script eller ftp til en bestemt mappe.
Jeg har i forvejen beskyttet en mappe med .htaccess med denne kode
order deny,allow deny from all
Men så mener jeg kun, der kan opnåes adgang via FTP, og tanken er altså, at der skal være browseradgang efter login.
Løsningen kunne også være at smide dokumenterne i MySQL, men så skal det ske via et upload-script, og så har webhotellet en begrænsning på filstørrelsen på 10 Mbyte. Det er heller ikke ideelt.
Jeg vil gerne en løsning, hvor jeg kan udnytte det login-system, som jeg har i forvejen (SESSION og MySQL).
Spændende, men for at være helt sikker, vil du så kommentere følgende:
1. Den valgte arkivmappe får en .htaccess-fil med dette indhold. order deny,allow deny from all
2. Jeg laver et script, hvor jeg lister filerne fra den beskyttede mappe, og linker til hver fil, hvor jeg kalder dit forslag til script med GET-parameter.
#2 1. Unødigt - chmod mappen i stedet eller flyt den uden for webscope. Men resultatet er det samme.
2. Det lyder som en fornuftig løsning.
#3 Hvad er en 'sikker mappe'? Hvis mappen er beskyttet af en .htaccess der ikke tillader HTTP adgang til mappen, så er filerne jo sikret mod visning/hentning.
Scriptet vil fint virke - medmindre du tilgår filen via cURL (som vil være molbo-agtigt, når filen alligevel ligger lokalt) har htaccess ikke noget at skulle have sagt, hvis et PHP script vil have adgang til en fil.
1. Hvis jeg på anvender cmod 711 på mappen, og derefter uploader nogle pdf-filer, så kan jeg fortsat hente filerne via et direkte HTML-link. Hvis jeg derimod anvender cmod på filerne, så kan jeg ikke hente dem. Men det vil være bøvlet, hvis jeg skal ændre attributterne på filerne.
#3 .htaccess løser problemet. Så er det heller ikke muligt med HTTP-adgang.
Du kan jo CHMOD med kode, så hvis filerne ligges op via et system, kan de CHMOD
REPOX: - det lyder som om du har rigtig godt styr på det. Så selvom vi er lidt tunge, kan du så ikke prøve at forklare det igen.
Er dette rigtig forstået: 1: Hvis vi har mappen, så kan vi lave en CHMOD på den og på filerne 2: Disse skal CHMOD'es - skal det være 700 eller hvad? 3: Hvis man så benytter scriptet: <?php
#5 Hov - jeg glemte helt tråden igen... :/ Umiddelbart vil en .htaccess løsning være den nemmeste, hvis du ikke kan flytte den uden for http scopet, så det ville være den løsning jeg ville vælge. For chmod bliver, som du selv siger, hurtig en bøvlet affære.
#7 Som tidligere nævnt kan du godt opnå den ønskede effekt med chmod, men det giver meget lidt mening, hvis .htaccess er en mulighed - det bevirker ikke filtilladelser og så er det effektivt.
Men det script som du gengiver (som jeg skrev) tvinger brugeren til at downloade det indhold, og ikke til visning i browseren.
Kan man egentlig gøre det samme med jpg, gif, png osv
og kan man gøre så den finder format her automatisk, så man ikke skal kende typen: header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename="downloaded.pdf"');
Undskyld mit sene svar. Jeg anvender 2 filer: 1 = lister filerne i min beskyttede mappe (dokumenter): 2 = Programkode, som beskrevet i denne tråd: Begge filer ligger i samme mappe, fx. roden og den beskyttede mappe ligger så i en undermappe, som jeg kalder "dokumenter". Dertil kommer .htaccess-filen som ligger i den beskyttede mappe.
FIL 1: // open this directory $myDirectory = opendir("dokumenter");
// get each entry while($entryName = readdir($myDirectory)) { $dirArray[] = $entryName; }
// close directory closedir($myDirectory);
// count elements in array $indexCount = count($dirArray);
// sort 'em sort($dirArray);
// print 'em print("<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks>\n"); print("<TR><TH><span class='text3'>Filnavn</span></TH></TR>\n"); // loop through the array of files and print them all for($index=0; $index < $indexCount; $index++) { if (substr("$dirArray[$index]", 0, 1) != "."){ // don't list hidden files print("<TR><TD><span class='text4'><a href='hentfil.php?req_file=$dirArray[$index]'>$dirArray[$index]</span></a></td>"); print("</TR>\n"); } } print("</TABLE>\n");
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.