Нестандартная защита от Hotlink-а

grey109

Новичок
Привет всем.


Есть сайт с большим количеством фотографий. С сайта люди активно берут фото и размещают их где-то у себя. Раньше я боролся с этим банально запрещая hotlink, но сейчас всё больше встречается случаев, когда браузеры настроены так, чтобы вообще не передавать Referer. Соответственно, даже на моем сайте мои же фотографии не отображаются.

Я думаю надо придумать какую-то метку и добавлять ее к имени файла, например, image.jpg?time=123abc, в которой будет закодировано время, в течение, например 15 минут, которого фото будет показываться всем и везде.

Если это будет мой сайт, то он каждый раз будет генерировать новую метку для фото и фото будет всегда отображаться в независимости от Referer.

Если это будет чужой сайт и кто-то скопирует ссылку, то она станет неактуальной через 15 минут и мой сайт будет отдавать картинку-заглушку с текстом «Оригинал фото распложен по адресу …».

Вот как бы есть пока такие мысли. Т.к. фото очень много, то это будет создавать какую-то нагрузку на сервер на кодирование/декодирование метки. Плюс фото отдавать придется скриптом наверно через nginx - это тоже не прибавит скорости.

Может есть какие-то другие решения или кто что подскажет как эту защиту лучше организовать?
 

WMix

герр M:)ller
Партнер клуба
вот все что написал, более менее годится.
итак есть линк /img/125.jpg?token=aaannn539ßr09w&time={now+15min}
тк фотки по этому адресу нет, вызывается скрипт, который проверяет token, далее отдает X-Axel /img/125.jpg.
а nginx уже вернет картинку если скрипт сделать легким то нормально будет
 
Последнее редактирование:

antonio

Moderator
Команда форума
Посоли timestamp + microtime и получи md5 hash
Создай таблицу для хранения хэшей с timestamp.
Перед формированием URL изображения пиши хэш и timestamp в эту таблицу.

Отдавать картинку придется скриптом, а в нем:
Не забудь установить время кэшировния (время экспирации) для браузера
Выбирай запись хэша с проверкой экспирации.
Отдавай нужное изображение в зависимости от времени экспирации.

чисти устаревшие записи с давностью больше времени экспирации.
 
Последнее редактирование:

grey109

Новичок
Спасибо. Значит я более или менее в правильном направлении мыслю.
 

AnrDaemon

Продвинутый новичок
Если вся потребная информация будет прямо в адресе, раскодировать сможет сам nginx.
 
Сверху