Ik heb een inlog systeem gemaakt voor de leden van een sportvereniging. Daar kunnen ze inloggen met naam en wachtwoord (session).
Op 1 van de pagina zijn ook documenten (pdf) te vinden die ze kunnen gebruiken voor oefeningen. Deze bestanden staan ook op de website. Maar hoe kan je dit beveiligen. Want als je de downloadlink weet hoe je dus niet in te loggen en kan je dit dus gewoon downloaden en aan iemand anders sturen.
Die documenten plaats je uiteraard buiten je webroot, en dus hoger dan je /public_html, /www of /htdocs directory.
Vervolgens bied je een geforceerde download aan nadat de gebruiker ingelogd is.
<?php
if( login_check() ) { // vervang dit door je eigen check of de gebruiker geauthenticeerd is.
$filename = '../facturen/factuur1234.pdf';
if (file_exists($filename)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
readfile($filename);
exit;
}
} else {
echo "Geen toegang.";
}
?>
Je stelt ze ergens buiten de root
Bij mij staan de bestanden in 1 map. Hieronder 3 mappen. httpd.www voor de rootmap van de website en daarnaast heb ik de 2 andere mappen: httpd.private en temp. Dan maak je een php bestandje welke het bestand ophaalt en doorstuurt als er de nodige rechten verleed zijn.
Bij mij ziet dat er ongeveer zo uit
<?php
if(sessioncheck()){
if (isset($_GET['file'])){
$file = $_GET['file'];
$file=offrootpad() . $file;
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($_GET['file']));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}else{
echo 'No file';
}
}else{
echo 'What will you try?';
}
}else{
echo 'No access!';
}
?>
sessioncheck() en offrootpad zijn functies welke je zelf moet maken volgens jouw instellingen.