Рекомендация: Как защитить файлы пользователя в веб-папке?

0

У меня есть сайт с разными группами пользователей. Каждая группа пользователей имеет разные страницы, к которым они могут получить доступ. Эти страницы могут содержать ссылки на файлы (документы, PDF и т.д.). Теперь каждая группа должна иметь доступ только к своим документам в папке, соответствующей группе.

Какова наилучшая практика для этой работы? Последующие вещи подошли:

  • Создайте хеш всех загруженных файлов и назовите файл в соответствии с хешем, чтобы его не удалось найти, пытаясь и ограничивая отображение каталога. (Проблема: ссылки могут быть доступны, и файлы будут доступны для общественности)
  • Ограничить доступ с файлом.htaccess (проблема: пользователь должен каждый раз вводить пароль, а cms можно связать с файлом.htaccess - не динамическим)
  • Проверьте, существует ли файл cookie с.htaccess, например http://www.willmaster.com/blog/contentprotection/htaccess-cookie.php (проблема: не динамическая, если я создаю новые группы пользователей)

Какое лучшее решение для этой проблемы? Это любой из упомянутых?

  • 1
    Переместите их за пределы веб-папки
  • 0
    и как я должен получить к ним доступ и загрузить через CMS? кроме того, группы также не будут динамичными.
Показать ещё 3 комментария
Теги:
cookies
.htaccess

1 ответ

1

То, что я сделал, это обертывание файлов в динамическом скрипте с контролем доступа:

if ($userIsLoggedIn)
{
  header('Content-Type: application/pdf');
  header('Content-Transfer-Encoding: binary');
  header('Content-disposition: inline; filename="'.$filenameOfPDF.'"');
  header('Pragma: public');
  readfile($pathToPDF);
}
else echo 'You do not have access';

Это написано на PHP. Сам файл хранится в каталоге, который недоступен из Интернета.

Единственное disatvantage состоит в том, что вам нужно будет сделать это для каждого типа файла. Если важна только доступ, вы можете обобщить:

if ($userIsLoggedIn)
{
  header('Content-Type: application/octet-stream');
  header('Content-Transfer-Encoding: binary');
  header('Content-disposition: inline; filename="'.$filename.'"');
  header('Pragma: public');
  readfile($path);
}
else echo 'You do not have access';

Но я уверен, что есть и другие решения.

  • 0
    Спасибо вам уже за ваш вклад! Можно ли загружать файлы с помощью CMS в недоступное место?
  • 0
    Если ваша CMS основана на сети, вы можете создать каталог, доступный для CMS, но не для чего-либо еще. Смотрите руководство вашей конкретной CMS. Это будет варьироваться от CMS к CMS, поэтому общий ответ не может быть дан.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню