В приложении CakePHP3, которое требует аутентификации/авторизации, у меня есть возможность загрузки изображений.
Теперь я бы хотел, чтобы пользователи не могли видеть изображения других пользователей, например. угадывая имена изображений или такие.
Также я хотел бы использовать идентификаторы сущностей как имена файлов, которые сделали бы его также легко угадать.
Итак, как бы вы реализовали авторизацию для активов?cakephp - Как разрешить активы?
ответ
Я бы предотвратить «угадывание» имен файлов просто генерации случайных достаточно долго неопределяемых строку символов в качестве нового файла, как Facebook делает с загрузкой фотографий:
Потому что мы не должны беспокоиться вообще с оригинальное имя файла, мы могли бы переименовать файл, который загружает пользователь. Например, Пользователь 24976 загружает файл, который называется tomato12.png
. Сценарий загрузки будет переименовать файл (например) следующее название:
1481540475_24976_iDewM51NYrBYgnIh.png
Он состоит из четырех частей:
[timestamp]_[userId]_[randomString].[suffix]
И затем сохраните имя в качестве база данных. Если вы заглянете в каталог uploads, вы сможете увидеть, какой пользователь загрузил этот файл, но аутсайдер, который не имеет права видеть индекс каталога, никогда не сможет угадать имя файла. Не требуется аутентификация.