2011-09-28 4 views
1

У меня есть папка (/ files), и у меня есть множество файлов, которые пользователи могут загрузить. Я хочу, чтобы пользователи могли загружать только свои файлы и не могли видеть файлы других людей.Запретить каталог и файлы для определенного пользователя

Например:

Пользователь А может только просматривать и загрузки:

- file1.doc 
- file2.jpg 

пользователь B может только просматривать и загрузки:

- file3.txt 
- file4.jpeg 

Пользователь C может только просматривать и загрузки:

- file1.doc 
- file2.jpg 
- file3.txt 

Моя идея состояла в том, чтобы поместить все файлы в одну папку, чтобы все пользователи знали, куда идти. Мой вопрос: могу ли я использовать .htaccess или мне нужно создавать скрипты PHP для этого? Что относительно безопасности (какой из них более безопасен)?

Благодаря

ответ

4

Это открытый каталог, для начала? Что вы можете сделать, так это создать подпапку для каждого пользователя, поместить туда свои файлы, а затем назначить соответствующие разрешения в .htaccess для указанных папок. Однако для этого потребуется некоторая интеграция безопасности с вашей ОС (т. Е. Пользователи должны иметь учетные записи на вашем компьютере, а не только ваше веб-приложение). Быстрая и грязная - и небезопасная - альтернатива - это добавить все загруженные имена файлов с именем пользователя (например, «file1.jpg», загруженные «foobar», могут быть названы, например, «foobar.file1.jpg»), то это всего лишь случай, когда ваш PHP-скрипт возвращает только те файлы с соответствующим именем пользователя и возможно, отключив эту часть при отображении (или, опять же, вы можете использовать папки, если ваш скрипт может создать новую папку для каждого пользователя, если ее не существует). Другим вариантом, который является немного, более безопасным является создание хэша файла и имен пользователей в базе данных, переименование всех загруженных файлов с помощью этого хэша и последующее обращение к базе данных соответствующим образом.

Лучшим решением, безусловно, будет учетная запись, управляемая ОС, о которой я впервые упоминал, но это влечет за собой дополнительные накладные расходы.

+0

Можете ли вы подробно описать хэш-файл? – Tech4Wilco

+0

Когда пользователь загружает файл, ваш скрипт может переименовать файл с помощью уникального ключа. Например, вы можете использовать хэш SHA1 имени пользователя и имени файла, а также некоторую соль (например, время загрузки); поэтому, если 'foo' загрузил' bar.jpg' на '201109291510', тогда вы можете переименовать этот файл в' SHA1 ('foo bar.jpg 201109291510') 'и в базе данных сохранить этот ключ с именем пользователя и original filename in plaintext ... – Xophmeister

+0

... Затем при отображении списка файлов вашему пользователю вы можете запросить базу данных 'WHERE user = 'foo'', показывая имена файлов открытого текста на экране, но ссылаясь на хэшированные имена файлов (которому было бы трудно для кого-либо переборщить). – Xophmeister

1

Построить PHP скрипт, где вы используете readfile для отправки файла в браузере. Таким образом, вы можете ограничить доступ к отдельным файлам и использовать уже имеющуюся систему аутентификации.

0

Для этого вы можете использовать либо htaccess, либо PHP. Насколько я знаю, ни один из них не является более безопасным, так как другой - хотя и ошибочный, может разрешить доступ, где никто не предназначен!

PHP может быть немного лучше, поскольку вы обладаете большей гибкостью (например, с точки зрения интеграции с другой аутентификацией PHP), и вы можете поместить эту папку за пределы обычного веб-корня, что в любом случае является хорошей практикой.

Смежные вопросы