Как защитить приватные фотографии, которые пользователь загружает на моем сайте?

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

Я думаю, что я могу просто хранить изображения за пределами webroot и получать к ним доступ через некоторый PHP. Однако, если пользователь хочет позже поделиться изображением с другом по ссылке, как бы разрешить это?

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

Спасибо за вашу помощь заранее!

Ответ 1

Вы правы в своем первоначальном предположении. Храните файлы вне общедоступного каталога и используйте PHP script для проверки авторизации и отображения изображения.

Чтобы обойти проблему совместного использования, вы можете дать им область, где они могут сказать "Поделиться этой фотографией", и на ней будет отображаться URL-адрес, например

http://www.yoursite.com/image/12390123?v=XA21IW

XA21IW будет некотором уникальным хешем, хранящимся в таблице, и они могут указывать время жизни, или вы можете самостоятельно его закодировать. Когда страница загружается и v передается, вы можете искать таблицу, чтобы определить, является ли она допустимым хешем для этого идентификатора изображения.

У вас есть несколько вариантов. Каждый раз, когда они нажимают "Поделиться этой фотографией", вы можете:

  • Уничтожить все старые хэши
  • Добавить в стек
  • Разрешить им устанавливать срок действия и т.д.

Или просто разрешить изображения публичным/частным.

Ответ 2

Вы можете использовать систему совместного доступа к профилю (пользователю), где зарегистрированный пользователь A может указывать, что зарегистрированному пользователю B разрешено просматривать изображение C и может добавлять/удалять такие разрешения по желанию.

Если привязка просмотра к учетной записи пользователя невозможна, вы могли бы "просматривать пароли" на изображениях или на группах изображений (например, в галерее); URL-адрес для просмотра изображений будет проверять, является ли пользователь/владелец единственным просмотром, а если нет, он потребует пароль.

Ответ 3

Я думаю, что нет никакой проблемы, это хранить изображения за пределами webroot и получать к ним доступ через некоторый PHP. Вы всегда можете получить к ним доступ с помощью php script, когда когда-либо пользователь делится им. Даже более безопасно это сделать, так как вы всегда можете выполнить некоторые проверки безопасности. перед фактическим отображением изображения.

Спасибо.

Ответ 4

Вы сохраняете изображение на своем сервере, размещаете имя изображения, данные, которые вам нужны, и некоторые хэш в вашем DB.... чем вы установили путь изображения к файлу php с именем images.php, где вы получите этот хэш с GET и найдите изображение с помощью хэша из вашей базы данных и с заголовком, установленным в образ /GIF, создайте образ. Путь к изображению будет images.php? Hash = abcdefg.

Другое думает о разрешении пользователя и так... Я думаю, что есть некоторые ответы на эти решения... это спокойно...