[PHP, MySql] PDF bestanden opslaan op FS en beveiliging?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb genoeg over dit onderwerp gevonden op Tweakers, maar niet echt een concreet antwoord gevonden. Graag jullie mening, tips etc...

Ik heb een webapplicatie gebouwd (PHP) om contracten mee te beheren; De balangrijkste gegevens van een contract worden opgeslagen en automatischs e-mailtje verstuurd wanneer een bepaald contract gaat verlopen etc...
Nu wil ik het programma uitbreiden door per contractitem ook daadwerkelijk het contract in pdf formaat aan te bieden... en toen kwam natuurlijk al snel de vraag; Op welke manier ga ik de pdf-jes opslaan.
Dit wil ik doen d.m.v. het filesystem van de server en de mysql DB die per contractitem naar de betreffende pdf verwijst; De pdf-jes kunnen aardig in formaat oplopen en heb begrepen dat qua performance van de DB het dan beter is om hier alleen de link in op te slaan en het fysieke document gewoon op het fs? (Correct me if I'm wrong...)

Dit moet mij allemaal wel lukken, maar ik vraag mij alleen af hoe het zit qua beveiliging. Aangezien de contracten natuurlijk vertrouwelijke informatie bevatten is het niet de bedoeling dat iedereen gewoon via bijvoorbeeld 'http://webappserver/contracts/' de hele lijst krijgt te zien en kan downloaden wat hij/zij wil?
Als de pdf-jes in de DB worden opgeslagen zijn ze wel al goed beveiligd, omdat je hier alleen met een username en wachtwoord bij kan.

Concreet wil ik dus de pdf-jes alleen kunnen benaderen vanuit de webapplicatie, nadat is ingelogd.

Heeft iemand tips hoe ik dit het best aan kan pakken? Via .htaccess o.i.d?

Acties:
  • 0 Henk 'm!

Verwijderd

in je .htaccess "deny from all". Met je php-script kan je er dan nog wel bij.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ga het ff proberen. Thanks!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beveiliging werkt goed. Alleen kom ik er nu vanuit me scripts ook niet meer bij?

Ik roep het bestand aan via <a href="contract/contract.pdf">Test</a>

De folder "contracts" heb ik beveiligd in de httpd.conf van Apache2 via:

<Directory "C:/WebServ/wwwroot/htdocs/contracts">
Options
AllowOverride None
order allow,deny
deny from all
</Directory>

Of moet ik iets aan deze instellingen veranderen?

[ Voor 10% gewijzigd door Verwijderd op 17-03-2006 21:49 ]


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

Misschien is sowieso wel handig om de documenten buiten de webroot te houden. En dan streamen naar de browser.

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 10:08

Spockz

Live and Let Live

Dat wat je nu doet is in feite wat je juist probeerd te voorkomen door de statement deny from all te geven.

Wat elguapo bedoelt is dat php zelf via het fs nog gewoon bij de bestanden kan. Op die manier zou je dus de contracten op kunnen halen.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

Verwijderd

wat je nu doet is vertellen waar ze het kunnen vinden... en niet zelf het bestand aan ze geven. een hyperlink is niets anders dan een wegwijzer. wat je moet doen is met php het bestand vanaf de fs opvragen en die vervolgens 'doorgeven' aan de gebruiker.

Acties:
  • 0 Henk 'm!

Verwijderd

Idd. Je hebt neem ik aan bepaalde logica om te bepalen of iemand bij een file mag of niet.

Vervolgens output je met iets als dit:
PHP:
1
2
3
4
5
6
header('Content-type: application/octet-stream');
header('content-length: '.$lenght.'');
header('content-disposition: attachment; filename='.$filename.'');

$fp=fopen($file, 'r');
fpassthru($fp)



Waarbij $file iets is als "contract/contract_pietje.pdf" of "contract/contract_keesje.pdf", afhankelijk van de rechten die iemand heeft.

[ Voor 26% gewijzigd door Verwijderd op 19-03-2006 23:52 ]

Pagina: 1