Как защитить личные фотографии, которые пользователь загружает на мой сайт? - PullRequest
10 голосов
/ 28 сентября 2010

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

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

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

Заранее спасибо за помощь!

Ответы [ 4 ]

9 голосов
/ 28 сентября 2010

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

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

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

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

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

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

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

2 голосов
/ 28 сентября 2010

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

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

1 голос
/ 28 сентября 2010

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

Спасибо.

0 голосов
/ 28 сентября 2010

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

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

...