Защита папки upload
Защита папки upload
Существуют ли модули или расширения для защиты всех файлов в папке upload?
Задача предоставить доступ к файлам только для залогиненых пользователей, причем пользователь с id 52 должен иметь доступ к файлам только в папке upload/user52, на остальные должен получать 403.
Задача предоставить доступ к файлам только для залогиненых пользователей, причем пользователь с id 52 должен иметь доступ к файлам только в папке upload/user52, на остальные должен получать 403.
Re: Защита папки upload
Что бы зная url нельзя было другому скинуть?
Re: Защита папки upload
Так нельзя. Верней можно, но подходит под очень редкие случаи, когда например нужно видео показать для определенного пользователя.
Опиши свою задачу лучше
Опиши свою задачу лучше
Re: Защита папки upload
Вы серьезно? редкие случаи? В моем случае пользователь загружает документы в виде картинок, xsl, pdf файлов и он должен быть абсолютно уверен, что никто кроме него их не увидит. Я не считаю что это редкий случай. Генерировать длинные рандомные имена не выход.
Проблем нет если просто направить с апача(нжинкса) при определенных условиях на экшен, который будет все проверять, кидать хедеры и файл через readfile, но в этом случае увеличится нагрузка на сервак. Вот я и спрашиваю может есть готовое решение с каким нибудь хитрым кэшем - поскольку файлов иногда очень много.
Проблем нет если просто направить с апача(нжинкса) при определенных условиях на экшен, который будет все проверять, кидать хедеры и файл через readfile, но в этом случае увеличится нагрузка на сервак. Вот я и спрашиваю может есть готовое решение с каким нибудь хитрым кэшем - поскольку файлов иногда очень много.
Re: Защита папки upload
Интересная задача. Я бы сделал так.
1. Для каждого пользователя завёл глобально уникальный ID (GUID) специально для работы с файлами.
Допустим "XYZ". Он будет секретным и пользователю нигде не "засвечивается". Хранится в БД в табличке пользователя.
2. Файлы пользователя кладём в папку "/upload/XYZ".
3. Запрещаем "прямой" доступ к любой подпапке папки "upload".
4. При регистрации нового пользователя, сразу генерируем ему GUID.
5. При логине пользователя генерируем ему строку типа "ABC", каждый раз рандомную.
6. При запросе "/my-files/user51/ABC/file1.jpg" скрыто от пользователя переписывать в "/upload/XYZ/file1.jpg" правилами Rewrite апача. То есть файл отдаём сразу, без браузерного редиректа, но средствами веб-сервера, не включая обработку PHP.
7. Файл с правилами Rewrite ABC->XYZ хранится в папке "/my-files/user51/" и "включается" апачем при обработке запроса "/my-files/user51/...".
Ну и всякие оптимизации здесь можно придумать, в зависимости от ваших условий. В целом вот так.
1. Для каждого пользователя завёл глобально уникальный ID (GUID) специально для работы с файлами.
Допустим "XYZ". Он будет секретным и пользователю нигде не "засвечивается". Хранится в БД в табличке пользователя.
2. Файлы пользователя кладём в папку "/upload/XYZ".
3. Запрещаем "прямой" доступ к любой подпапке папки "upload".
4. При регистрации нового пользователя, сразу генерируем ему GUID.
5. При логине пользователя генерируем ему строку типа "ABC", каждый раз рандомную.
6. При запросе "/my-files/user51/ABC/file1.jpg" скрыто от пользователя переписывать в "/upload/XYZ/file1.jpg" правилами Rewrite апача. То есть файл отдаём сразу, без браузерного редиректа, но средствами веб-сервера, не включая обработку PHP.
7. Файл с правилами Rewrite ABC->XYZ хранится в папке "/my-files/user51/" и "включается" апачем при обработке запроса "/my-files/user51/...".
Ну и всякие оптимизации здесь можно придумать, в зависимости от ваших условий. В целом вот так.
Re: Защита папки upload
Спасибо огромное. Два вопроса:
1. пункт 6 - как вебсервер будет сравнивать user51 и XYZ - откуда он знает об их соотвествии? мы будем дописывать htaccess каждый раз как регистрируется пользователь? что если за статику отвечает нжинкс?
2. тот же вопрос про ABC - откуда вебсервер знает текущий индификатор сессии клиента? Потому-что если он его не сравнивает, то любой может воспользоваться ссылкой
Или мы будем таки редиректить в Yii? но тогда
1. пункт 6 - как вебсервер будет сравнивать user51 и XYZ - откуда он знает об их соотвествии? мы будем дописывать htaccess каждый раз как регистрируется пользователь? что если за статику отвечает нжинкс?
2. тот же вопрос про ABC - откуда вебсервер знает текущий индификатор сессии клиента? Потому-что если он его не сравнивает, то любой может воспользоваться ссылкой
Или мы будем таки редиректить в Yii? но тогда
не будет работать?Запрещаем "прямой" доступ к любой подпапке папки "upload"
Re: Защита папки upload
См. п.7, соответствие прописано в .htaccess-файле в папке "/my-files/user51"пункт 6 - как вебсервер будет сравнивать user51 и XYZ - откуда он знает об их соотвествии?
Так тоже можно, но тогда ссылки будут неизменными, а значит доступны любому пользователю. Поэтому файл перезаписывается в момент авторизации пользователя, а не регистрации. Так мы обеспечиваем, что ссылки работают только в пределах сессии пользователя.мы будем дописывать htaccess каждый раз как регистрируется пользователь?
Либо придумать аналогичную схему для нжинкс, либо раздать эти файлы апачем ) Я не работал ещё с нжинкс. Он ведь умный и всё умеет?что если за статику отвечает нжинкс?
ABC не идентификатор сессии ) Хоть и хранится в тех же пределах. ABC генерируется специально для доступа к файлам и используется только для этого.тот же вопрос про ABC - откуда вебсервер знает текущий индификатор сессии клиента?
Вебсервер "знает" из .htaccess-файла в папке "/my-files/user51", этот файл подключается автоматом при обработке соответствующего запроса с помощью специальных правил. См. п.7
Пользователь не сможет открытьно тогдане будет работать?Запрещаем "прямой" доступ к любой подпапке папки "upload"
http://site.com/upload/XYZ/file1.jpg
Тем более, что "XYZ" пользователю будет неизвестно в принципе.
Но сможет открыть
http://site.com/my-files/user51/ABC/file1.jpg
который втайне от пользователя будет преобразован вебсервером в
http://site.com/upload/XYZ/file1.jpg
Re: Защита папки upload
Всем спасибо!