У меня есть проект, который занимается хранением конфиденциальных личных изображений или других файлов у пользователя. Я немного поработал над хранением таких файлов, как изображения в файловой системе или базах данных.Как хранить личные изображения пользователей в файловой системе, а не препятствовать их конфиденциальности?
Я придумал решение сохранить их в CDN, как это делает facebook. Но как я могу обеспечить, чтобы кто-то не нарушал чужую конфиденциальность, просто поправляя URL-адрес и заменяя случайные символы?
Например: Предположим, что у меня есть два изображения в моей файловой системе CDN,
Загружено user1- https://somecdnlink.com/somelocation/1234abc-5678pqr.jpg
Загрузил user2- https://somecdnlink.com/somelocation/1234abc-5679pqr.jpg
Теперь user2 после загрузки их ПОС решили проверьте URL-адрес изображения. Изображение, которое они только что загрузили, выскользнуло, обнажая место, где оно хранится. Затем он решает проверить, что произойдет, если он уменьшит число 9 и записывает 8 в этом месте.
Это автоматически откроет образ пользователя1, который он сохранил на сервере cdn, и должен быть закрыт.
Как я могу гарантировать, что пользователь2 не имеет доступа к изображениям другого пользователя в файловой системе? Как делают facebook как гиганты?
Изображения могут быть очень большими, и миллионы таких изображений могут существовать.
Я мог бы попробовать рандомизировать имена файлов и, возможно, сделать хэширование и прочее, но такая грубая сила, как атака, проверяющая каждую возможную перестановку, может легко выставить много фотографий.
Кроме того, хранится в базе данных лучший вариант в таком случае, а не в cdn?
Я использую php и mysql.
Аутентификация! Перед выдачей убедитесь, что пользователь является владельцем ресурса. Obscurity не подходит для этого. –
Предположим, вы получили ссылку на pic-www.mysite.com/123/img/mypic.jpg, но вы не должны ее видеть, как мне ее аутентифицировать? @ronniskansing –