как защитить фотографии участников для веб-сайта с высоким трафиком


На реальном проекте (сайте знакомств) у меня есть следующий сценарий:

Участник может загружать фотографии (основной профиль), создавать альбомы и назначать им фотографии. Теперь участник может разрешить доступ к альбому только зарегистрированным участникам, премиум-участникам или участникам в его избранном.

Самое простое решение - скрыть альбом, но если кто-то, у кого есть доступ, опубликует URL-адрес src на фотографии, он будет доступен всем, у кого есть URL-адрес.

Я вижу фликр и facebook надежно защищает их, но как я могу реализовать это без необходимости многократно запрашивать базу данных и копировать авторизацию/сеанс пользователя. Фотографии будут храниться на собственном сервере (varnish/nginx).

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

Решения должны обрабатывать фактические 20 миллионов участников и около 30 миллионов фотографий.

Author: Nenad, 2010-08-24

3 answers

Ну, одной из возможностей было бы запустить что-то вроде Lighttpd mod_secdownload.

В основном вы устанавливаете "секретную" строку в разделе конфигурации. Затем, когда вы создаете ссылки, вместо того, чтобы создавать ссылку на ресурс, это временная ссылка (поэтому она действительна только в течение $x количества секунд). Таким образом, пользователю необходимо снова посетить страницу (и, следовательно, снова пройти контроль доступа), прежде чем ему будет разрешено просмотреть это изображение...

В Apache есть аналогичный модуль: mod_auth_token...

 4
Author: ircmaxell, 2010-08-24 14:54:59

Лучшим решением является хранение изображения за пределами веб-доступной части вашего сервера. Затем, вместо прямой ссылки на фотографию, вы бы ссылались на страницу php, указывающую на изображение следующим образом:

Http://www.example.com/image.php?imageid=1234567

Затем в вашем php-скрипте вы можете проверить, имеет ли вошедший в систему пользователь доступ к фотографии, и если да, вы передаете изображение пользователю в ответ.

 0
Author: Kibbee, 2010-08-24 14:37:14

Как идея...

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

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

 0
Author: , 2010-08-24 14:41:21