Lägg filerna utanför webbroten. Använd sedan PHP för att skicka filen genom ett skript. På så sätt kan ingen länka till filen direkt och kringgå dina kontroller. (Se naturligtvis till att skriptet som gör detta först efter att ha verifierat att användaren har behörighet att hämta den filen).
Exempel på PHP:
<?php
if (!isset($_SESSION['authenticated'])) {
exit;
}
$file = '/path/to/file/outside/www/secret.pdf';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
?>