Как запретить доступ к фото от других пользователей?
Как запретить доступ к фото от других пользователей? Сейчас все фото всех пользователей лежат в общедоступной папке. Мне нужно, чтобы каждый пользователь авторизированный имел доступ только к своим фото, а неавторизированный вообще не имел доступа.
Можно перемести в папку, где нет доступа напрямую или каким-то ключом закрыть доступ, но как? Знаю, что у фейсбука реализовано так, что в конце поставляется токен и если его нет, то доступ к фото не получишь:
fb.com/foto.png?token=lalalalalallalalalalal
два варианта:
1. присваиваем файлам длинные, сложно подбираемые пути/названия.
плюс: очень быстро работает, нет дополнительной нагрузки на сервер
минус: у картинки есть общедоступный url который может быть скомпрометирован
2. кладем файлы в недоступную снаружи папку, доступ к ним идет через скрипт проверяющий авторизацию пользователя
плюсы и минусы соответственно наоборот.
"минус: у картинки есть общедоступный url который может быть скомпрометирован" а каким образом? Сейчас у файлов такие названия "25021467_102762167190114_2484671407171043328_n.jpg": генерация по timestamp а потом хаотичное длинное число добавляется.
Проиндексирует поисковик, вот и компрометация. Несколько лет назад у одного их мобильных операторов произошел такой фейл, когда выписки клиентов оказались в индексе. Они, наверное, тоже думали, что такого не произойдет
Space, потому что отдать файл напрямую через nginx на порядки быстрее чем запустить php скрипт, подключиться к базе, проверить права, итд. Но в целом это единственное нормальное решение если действительно нужно ограничивать доступ.
Кстати почитайте про nginx x-accel-redirect, очень советую.