Одна вещь, которую вы можете сделать, это хранить все ваши «секретные» файлы в каталоге за пределами webroot сервера. Весь доступ к этим файлам может быть перенаправлен через один PHP-скрипт внутри вашего каталога. Примерно так:
http://www.example.com/protected-directory/access.php?file=/foo/document.doc
С такой структурой каталогов:
+--+ /server_root
|
+--+ /web_root
| |
| +--+ /protected-directory
| +-- access.php
| +-- access-denied.html
|
+--+ /protected_root
|
+--+ /foo
+-- document.doc
В вашем access.php
вы бы сделали что-то вроде этого:
$file = $_REQUEST['file'];
if ($user->hasAccessTo($file)) {
readfile("/server_root/protected_root/$file");
} else {
readfile('access-denied.html');
}
Теперь вы должны быть осторожны, чтобы убедиться, что никто не прикручивает ваш file
-параметр и передает что-то вроде "../../../etc/passwd"
. Кроме того, вы, вероятно, хотите убедиться, что отправляете правильные заголовки в приведенном выше примере, я для простоты опускаю это.