[PHP] directory beveiligen *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
Ik ben een website aan het maken voor een bedrijfje. De bedoeling is dat er door de klanten ingelogd kan worden, waarna ze datasheets van de verschillende producten kunnen bekijken. Dit moet echter wel alleen mogelijk zijn voor de klanten die ingelogd hebben. Elke klant heeft zijn eigen loginnaam en wachtwoord, en het bedrijf kan zelf met een "administrator" loginnaam klanten aanmaken en verwijderen (oa).
De datasheets zullen in .pdf-formaat op de site komen. Ik wil nu dus de directory met de pdfjes beveiligen, zodat alleen de klanten met een geldige loginnaam deze files aankunnen. .htaccess is natuurlijk een optie, maar is het dan ook mogelijk om via php en een mysql-database de klanten de toegang tot deze directory te geven, of juist te ontzeggen? Of zijn er nog andere opties?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

maar is het dan ook mogelijk om via php en een mysql-database de klanten de toegang tot deze directory te geven, of juist te ontzeggen?
Erhm.. ja. :? Gewoon leesrechten van de folder ontnemen en via een scriptje een bestand teruggeven.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
Ja, maar met .htaccess zet je toch in dat bestand de gebruikersnaam en het wachtwoord dat je nodig hebt om in die directory te komen? Op die manier kan het natuurlijk ook wel, maar het zou mooier zijn als ik gewoon steeds (als dat kan) wanneer er een nieuwe user aangemaakt wordt, dat zijn gebruikersnaam en wachtwoord automatisch naar de htaccess file worden geschreven, en wanneer deze gebruiker verwijderd wordt, dat dan automatisch ook de betreffende regel uit de htaccess file verwijderd wordt. Opzich moet dit volgens mij wel kunnen, maar is er ook een makkelijkere manier?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Kan ook. Zie oa http://www.hotscripts.com...ord_Protection/more2.html . Maar wat is er mis met een simpele MySQL / PHP oplossing?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 20-09 21:53
Dr_Frickin_Evil schreef op 26 januari 2004 @ 11:07:
Ja, maar met .htaccess zet je toch in dat bestand de gebruikersnaam en het wachtwoord dat je nodig hebt om in die directory te komen? Op die manier kan het natuurlijk ook wel, maar het zou mooier zijn als ik gewoon steeds (als dat kan) wanneer er een nieuwe user aangemaakt wordt, dat zijn gebruikersnaam en wachtwoord automatisch naar de htaccess file worden geschreven, en wanneer deze gebruiker verwijderd wordt, dat dan automatisch ook de betreffende regel uit de htaccess file verwijderd wordt. Opzich moet dit volgens mij wel kunnen, maar is er ook een makkelijkere manier?
Lijkt me toch niet zo moelijk om via een PHP script users toe te voegen en te verwijderen in een htaccess bestand? Daarbij kan je in de search en via google genoeg scriptjes hiervoor vinden.

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
gorgi_19 schreef op 26 januari 2004 @ 11:11:
Kan ook. Zie oa http://www.hotscripts.com...ord_Protection/more2.html . Maar wat is er mis met een simpele MySQL / PHP oplossing?
Ja dat was mijn vraag ook. Kan ik een dergelijke oplossing ook maken met enkel PHP en MySQL? Maw een directory beveiligen zonder htaccess?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Dr_Frickin_Evil schreef op 26 januari 2004 @ 11:16:
[...]

Ja dat was mijn vraag ook. Kan ik een dergelijke oplossing ook maken met enkel PHP en MySQL? Maw een directory beveiligen zonder htaccess?
Gewoon leesrechten van de folder ontnemen en via een scriptje een bestand teruggeven.
Dit scriptje controleert dan de gebruikersrechten in de database. Voldoende rechten, dan wordt het bestand opgehaald en getoond, anders wordt geredirect naar een foutmeldingpagina.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
Hm ja dat klinkt inderdaad wel goed. Zoiets moet ik hebben, zal eens aan het zoeken gaan.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Check ook dit stukje uit de manual inclusief usernotes. Staat ongetwijfeld interessante info tussen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 12:56
maar is het dan ook mogelijk om via php en een mysql-database de klanten de toegang tot deze directory te geven, of juist te ontzeggen?
Is het niet mogelijk om die PDF-jes in de database te zetten :? :)
Met een beetje goed programmeren, kun je dan de bestandjes alleen door de gerechtigde laten ophalen.

let the past be the past.


Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
SPee schreef op 26 januari 2004 @ 11:26:
[...]


Is het niet mogelijk om die PDF-jes in de database te zetten :? :)
Met een beetje goed programmeren, kun je dan de bestandjes alleen door de gerechtigde laten ophalen.
Hmm interessant. Maar hoe zit dat eigenlijk precies? De files komen dan daadwerkelijk ìn de database, maar hoe zit dat dan met grote bestanden. Natuurlijk wel een leuke manier om je webspace te sparen, of zie ik dat dan toch verkeerd? Het gaat in totaal om zo'n 150 bestanden, dus waarschijnlijk is een gewone directory een betere optie.

[ Voor 10% gewijzigd door Dr_Frickin_Evil op 26-01-2004 12:09 ]


Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
Hmm, misschien een stomme vraag, maar hoe moet ik de rechten van de directory instellen zodat PHP een file wel kan benaderen, en een anonieme internetter niet?

Acties:
  • 0 Henk 'm!

  • rig0r
  • Registratie: Juli 2001
  • Laatst online: 11-03 16:08
Waarom zet je je PDF's niet in een directory buiten je webtree ? Dan maak je zelf een soort van download.php waarin je user permissies checkt en als alles OK is stuur je middels je PHP script de PDF-file naar de gebruiker toe. Hoef je iig niet te pielen met .htaccess files :)

Voorbeeld code: http://www.higherpass.com/PHP/content.php?id=6

[ Voor 12% gewijzigd door rig0r op 26-01-2004 13:22 ]


Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
Das helaas geen optie, ik kan namelijk geen directories aanmaken buiten mijn webtree.
Ik heb al wel een idee hoe ik het op kan lossen, maar dan moet ik uit zien te vinden hoe ik de rechten instel zodat php de file wel aankan, maar een anonieme gebruiker niet. Ik dacht dat dat kon, maar kan het niet vinden.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Je hoeft helemaal niet met .htaccess 'jes te klooien. Als php keurig als module geinstalleerd is kun je $_SERVER [ 'PHP_AUTH_USER' ] en $_SERVER [ 'PHP_AUTH_PW' ] keurig matchen tegen een database en de files fpassthru'en. En je hoeft bestanden ook niet buiten de webroot te zetten om ze af te schermen. Een directory afschermen gaat net zo makkelijk met een .htaccess bestand waar niets meer dan
code:
1
2
Order Deny, Allow
Deny from All
in staat.

Lees die manual gewoon even, ik post die link net niet voor niks.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
Ik heb nu het volgende gedaan.
Een .htaccess geupload zoals drm hierboven zegt, en ik heb het volgende phpscriptje gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$file = "pdf/bla.pdf";

if (file_exists($file)) {
    $fd = fopen ($file, "rb");
    $fname    = basename($file);
    $fdir = dirname ($file);
    $filesize = filesize($file);

    header("Content-type:application/pdf");
    header("Content-Disposition: inline; filename=\"$fname\"");
    header("Content-length: $filesize");
    header('Cache-Control: no-cache');
    header('Pragma: no-cache');
    header('Expires: 0');
    header("location: $file");

    fpassthru($fd);
}
?>

Het werkt echter niet, ik krijg een internal server error. Het bestand kan gewoon niet benaderd worden, en dat komt door de .htaccess file. Maar wat doe ik dan fout? Dacht dat het zo wel ongeveer zou moeten werken...

Edit: Ik ben er al achter, die header("location: $file"); moet daar natuurlijk helemaal niet staan. Nu werkt het wel.

[ Voor 38% gewijzigd door Dr_Frickin_Evil op 26-01-2004 18:31 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
offtopic:
php code kan je beter met [ php ] tags doen, en verder natuurlijk de variablen buiten quotes halen en handige single quotes gebruiken zodat je niet hoeft te escapen, zoals bij de 'Content-Disposition:' regel.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$file = 'pdf/bla.pdf';

if (file_exists($file)) {
    $fd = fopen ($file, 'rb');
    $fname    = basename($file);
    $fdir = dirname ($file);
    $filesize = filesize($file);

    header('Content-type:application/pdf');
    header('Content-Disposition: inline; filename="'.$fname.'"');
    header('Content-length: '.$filesize);
    header('Cache-Control: no-cache');
    header('Pragma: no-cache');
    header('Expires: 0');
    header('location: '.$file);

    fpassthru($fd);
}
?>

[ Voor 23% gewijzigd door djluc op 26-01-2004 18:43 ]


Acties:
  • 0 Henk 'm!

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Een goede tutorial voor een login-systeem dat gebruik maakt van PHP en mySQL vind je hier: http://www.born2program.c...p?page=tutorial_page&id=1

Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
thx voor de tip, wanneer gebruik je nu eigenlijk ' en " dan? Of maakt dat totaal niet uit, en kun je beter ' gebruiken omdat je dan zoals jij al zegt, niet hoeft te escapen?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Dr_Frickin_Evil schreef op 26 januari 2004 @ 18:49:
thx voor de tip, wanneer gebruik je nu eigenlijk ' en " dan? Of maakt dat totaal niet uit, en kun je beter ' gebruiken omdat je dan zoals jij al zegt, niet hoeft te escapen?
Het schijnt hele minimale verschillen in de parsetime te maken die echt niet noemenswaardig zijn. Maar ik gebruik het altijd. De defenitie van de single quotes is dat ze niet geparsed worden. Voor mij is het altijd meteen duidelijk te zien aan de quotes of iets wel of niet geparsed wordt.

Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
hmm, niet geparsed? Hoe bedoel je dat precies?

Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
Hmm ik loop in IE toch tegen een probleempje aan. IE wil het bestand getfile.php?name=test.pdf gaan downloaden. Dat werkt dus niet. Ik las op www.php.net dat ik dan
PHP:
1
2
3
if (ini_get('zlib.output_compression')) {
    ini_set('zlib.output_compression', 'Off');
    }

zou moeten toevoegen in mn script, maar dat werkt ook niet (die output compressie stond uberhaupt niet aan bleek). Weet iemand wat het probleem is?

Dit is mn totale code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
if (ini_get('zlib.output_compression')) {
    ini_set('zlib.output_compression', 'Off');
    }

$file_name = $_GET['name'];
$file_dir = 'pdf/';
$file = $file_dir.$file_name;

if (file_exists($file)) {
    $fd = fopen ($file, 'rb');
    $filesize = filesize($file);

    header('Content-type: application/pdf');
    header('Content-Disposition: inline; filename="$file_name"');
    header('Content-length: $filesize');
    header('Cache-Control: no-cache');
    header('Pragma: no-cache');
    header('Expires: 0');

    fpassthru($fd);
    }
?>

[ Voor 41% gewijzigd door Dr_Frickin_Evil op 26-01-2004 22:57 ]


Acties:
  • 0 Henk 'm!

  • snoopy
  • Registratie: December 2000
  • Laatst online: 17-08 08:27
Probeer dit eens...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$file_name = $_GET['name'];
$file_dir = 'pdf/';
$file = $file_dir.$file_name;

if (file_exists($file)) {
    $fd = fopen ($file, 'rb');
    $filesize = filesize($file);

    header('Content-type: application/pdf');
    header('Content-Disposition: inline; filename="'.$file_name.'"');
    header('Content-length: '.$filesize);
    header('Cache-Control: no-cache');
    header('Pragma: no-cache');
    header('Expires: 0');

    fpassthru($fd);
    }
?>


Je was vergeten om $file_name en $filesize buiten de accolades te halen, aangezien variabelen tussen enkele accolades niet worden geparsed.

Daarnaast is het niet verstandig om $file_name zomaar uit te lezen uit $_GET zonder verdere controle...

Acties:
  • 0 Henk 'm!

Verwijderd

waarom niet gewoon een directory met beveiliging d.m.v. username, wachtwoord:
als ze erin zijn een lijst van alle pdfjes.

easy als wat en geen gezeik met htaccess

Acties:
  • 0 Henk 'm!

  • Billie
  • Registratie: Januari 2003
  • Laatst online: 16-09 20:27
Of als je de PDF wilt laten downloaden,

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$file_name = $_GET['name'];
$file_dir = 'pdf/';
$file = $file_dir.$file_name;

if (file_exists($file)) {
    $fd = fopen ($file, 'rb');
    $filesize = filesize($file);

    header ("Content-Type: application/octet-stream");
    header('Content-Disposition: inline; filename="'.$file_name.'"');
    header('Content-length: '.$filesize);
    header('Cache-Control: no-cache');
    header('Pragma: no-cache');
    header('Expires: 0');

    fpassthru($fd);
    }

Acties:
  • 0 Henk 'm!

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:42
Het probleem zat hem toch ergens anders. Dit is m'n code nu:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<? 
if (ini_get('zlib.output_compression')) { 
    ini_set('zlib.output_compression', 'Off'); 
    } 

$file_name = basename($_GET['name']);
$file_dir = 'pdf/'; 
$file = $file_dir.$file_name;

if (file_exists($file)) { 
    $filesize = filesize($file); 

    header('Cache-Control: '); 
    header('Pragma: '); 
    header('Content-type: application/pdf'); 
    header('Content-Disposition: inline; filename="'.$file_name.'"'); 
    header('Content-length: '.$filesize); 

    $fd = fopen ($file, 'rb'); 
    fpassthru($fd); 
    } 
?> 

Beetje vaag probleem. Als ik Cache-Control leeglaat, en Pragma ook, dan werkt het wel ineens. Tja, het werkt weer. Ik zoek later wel uit waarom dat eerst niet werkte.

[ Voor 24% gewijzigd door Dr_Frickin_Evil op 27-01-2004 18:07 ]

Pagina: 1