Legen Sie die Dateien außerhalb des Webroot ab. Dann mit PHP die Datei durch ein Skript übergeben. Auf diese Weise kann niemand direkt auf die Datei verlinken und Ihre Kontrollen umgehen. (Natürlich stellen Sie sicher, dass das Skript, das dies tut, erst nach Überprüfung des Benutzers die Berechtigung hat, diese Datei abzurufen).
Beispiel-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;
?>