Скачивание удалённых изображений с Referer (возможно ли это через плагин?)

Я работаю над миграцией на Discourse и знаю о SiteSetting.download_remote_images_to_local. Это отлично.

Однако, когда я (медленно) пересоздаю сообщения, чтобы скачать все изображения, я заметил, что Photobucket отдаёт изображение с водяным знаком в зависимости от реферера.

Я бегло посмотрел, и похоже, что скачивание обрабатывается в /lib/final_destination.rb. Я мог бы временно исправить это только для пересоздания после миграции, но это не решает гипотетическую проблему, когда в будущем люди будут встраивать изображения с ненадёжных хостингов. Думаю, любой здравомыслящий человек сейчас понимает, что не стоит использовать Photobucket, и я не знаю других сервисов, которые добавляют водяные знаки, так что, возможно, это не большая проблема.

Мой вопрос такой: кто-то уже решил эту проблему? И можно ли это реализовать с помощью плагина? Я ещё не изучил, как работают плагины.

Или, будет ли плохой идеей всегда устанавливать реферер в scheme://domain/ при скачивании удалённого изображения? В каких случаях это может быть плохой идеей для самого Discourse?

Если хотите увидеть, о чём я говорю:

https://i1111.photobucket.com/albums/h475/scoobystuff/Stereo/S1080033.jpg

# с водяным знаком:
curl -LO \
  'https://i1111.photobucket.com/albums/h475/scoobystuff/Stereo/S1080033.jpg'
# без водяного знака:
curl -LO --referer 'https://i1111.photobucket.com/' \
  'https://i1111.photobucket.com/albums/h475/scoobystuff/Stereo/S1080033.jpg'

Мне не нравится, что они накладывают водяные знаки, но отправка поддельного referrer-а для их скрытия на самом деле нарушает условия использования Photobucket. Одно из требований для бесплатных аккаунтов — наличие водяного знака при использовании сервиса для хостинга. На платных аккаунтах водяные знаки не добавляются.

Что?

Откуда такой вывод? Ни одно лицо, просто скачивающее изображение без аккаунта (или даже без аутентификации), не соглашается с Условиями использования. Более того, эти условия даже не предъявлялись такому лицу.

Условия использования применяются к загружающему. В частности:

БЕСПЛАТНЫЙ АККАУНТ НЕ ПОЗВОЛЯЕТ ХОСТИТЬ ИЗОБРАЖЕНИЯ. В ТОЙ СТЕПЕНИ, В КАКОЙ МЫ ПО СВОЕМУ ИСКЛЮЧИТЕЛЬНОМУ И АБСОЛЮТНОМУ УСМОТРЕНИЮ ПОЗВОЛЯЕМ БЕСПЛАТНОМУ АККАУНТУ ХОСТИТЬ ИЗОБРАЖЕНИЕ, ЭТО ИЗОБРАЖЕНИЕ БУДЕТ СОДЕРЖАТЬ ВОДЯНОЙ ЗНАК PHOTOBUCKET, УКАЗЫВАЮЩИЙ НА ТО, ЧТО ИЗОБРАЖЕНИЕ ХОСТИТСЯ НАМИ. ЕСЛИ МЫ РАЗРЕШИМ ЛЮБОЕ БЕСПЛАТНОЕ ХОСТИНГ ИЗОБРАЖЕНИЙ, МЫ ОСТАВЛЯЕМ ЗА СОБОЙ ПРАВО БЛОКИРОВАТЬ ИЗОБРАЖЕНИЕ ИЛИ РАЗМЫВАТЬ И НАЛОЖИТЬ ВОДЯНОЙ ЗНАК НА ИЗОБРАЖЕНИЕ ПО СВОЕМУ ИСКЛЮЧИТЕЛЬНОМУ И АБСОЛЮТНОМУ УСМОТРЕНИЮ. ВЛАДЕЛЬЦАМ БЕСПЛАТНЫХ АККАУНТОВ НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ ПЕРЕЙТИ НА ПЛАТНЫЙ АККАУНТ, КОТОРЫЙ ПОЗВОЛЯЕТ ХОСТИНГ ДЛЯ ТРЕТЬИХ ЛИЦ.

Кроме того, это утверждение лишь информирует о возможностях аккаунта («БЕСПЛАТНЫЙ АККАУНТ НЕ ПОЗВОЛЯЕТ ХОСТИТЬ ИЗОБРАЖЕНИЯ… ЕСЛИ МЫ РАЗРЕШИМ ЛЮБОЕ БЕСПЛАТНОЕ ХОСТИНГ ИЗОБРАЖЕНИЙ…»), и, соглашаясь с этим, владелец аккаунта лишь был проинформирован об этом. Если бы у меня был бесплатный аккаунт Photobucket и я загрузил бы это изображение, я бы даже не нарушил условия, разместив прямую ссылку на него в этой теме, поскольку формулировка не подразумевает, что я должен согласиться не совершать таких действий. Цель этого заявления — чтобы владелец бесплатного аккаунта, например, не мог подать в суд на Photobucket за отказ в обслуживании.

Сравните это со следующим утверждением, которое я выдумал и которого нет в их реальных Условиях использования:

ВЛАДЕЛЕЦ БЕСПЛАТНОГО АККАУНТА СОГЛАШАЕТСЯ НЕ ИСПОЛЬЗОВАТЬ АККАУНТ ДЛЯ ХОСТИНГА ИЗОБРАЖЕНИЙ И НЕ БУДЕТ РАЗМЕЩАТЬ ПРЯМЫЕ ССЫЛКИ НА ИЗОБРАЖЕНИЯ В ДРУГИХ МЕСТАХ.

Один мой друг сделал именно то, что вы предлагаете, на своём сервере, и Photobucket заблокировал его. Дайте мне минуту, я поищу копию письма, которое они ему отправили.

На мой взгляд, это не является нарушением условий использования с юридической точки зрения, но Photobucket, разумеется, вправе по своему усмотрению отказать в обслуживании кому угодно (если только они не связаны договорными обязательствами). Было бы интересно увидеть это письмо. Неужели Photobucket получил его адрес электронной почты из раздела контактов его сервера или откуда-то ещё?

Огромное спасибо за предупреждение! Когда я буду выгружать все изображения с Photobucket (при финальной миграции), обязательно сделаю это через прокси или что-то в этом роде. Хотя, впрочем, это не так уж и важно, lol. Никто больше не использует Photobucket. Также я не оставлю подмену реферера на продакшн-сервере, но, надеюсь, для новых материалов в будущем это и вовсе не понадобится.

Хотя это не будет нарушением Условий использования, это может стать нарушением DMCA (или нарушения другого закона об авторском праве другой страны) в случае обхода метода, используемого для защиты авторских прав на изображение или контроля доступа к оригинальному изображению.

Я не думаю, что подделка заголовка Referer считается проявлением «хорошего поведения в интернете», и если DMCA действительно применима, то даже распространение такого программного обеспечения может быть незаконным.

Многие скрипты импорта имеют собственный код для загрузки вложений. Не рассматривали ли вы возможность создания регулярного выражения и применения этой логики также к встроенным изображениям с Photobucket — включая заголовок Referer?

Я не думаю, что в данном случае применимо нарушение авторских прав или обход защиты, поскольку в Условиях использования указано, что загрузчик сохраняет за собой все права (хотя, возможно, в какой-то юрисдикции срабатывает какой-то закон). Однако я принимаю ваш аргумент о необходимости уважать стандартное поведение браузера и быть «хорошим гражданином веба» — если смотреть на это так, то мне кажется бессмысленным включать подмену Referer в качестве официальной функции.

Да, я должен суметь загрузить изображения (без водяных знаков) для своего переноса. В моем случае с импортером phpBB проще всего временно модифицировать сам Discourse для подмены Referer при загрузке удаленных изображений, а затем выполнить пересборку (rebake), поскольку импортер не обрабатывает сохранение удаленных изображений (за исключением аватаров).

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

Тот факт, что загрузчик сохраняет за собой права, включая право контролировать использование и распространение своего контента, не даёт другим лицам права изменять или удалять водяные знаки с этого контента без разрешения.

DMCA также охватывает контроль доступа, что применимо в данном случае (т.е. они имеют право размещать изображение без водяного знака только в том случае, если оно окружено их рекламой, а удаление этого механизма означает доступ к изображению иным способом, чем они того хотят).

ха-ха, возможно. но учтите, что такие проекты, как youtube-dl, до сих пор доступны на GitHub. это делает подмену referer довольно безобидной по сравнению с этим, и поверьте, RIAA действительно пыталась добиться его удаления. если вы следите за подобными новостями, то знаете, что это какое-то время было в «новостях».

Позвольте мне перефразировать: youtube-dl не всё ещё работает, он снова работает после того, как был заблокирован.

И это только потому, что существуют законные варианты использования.

Это не означает, что все случаи использования являются законными.

Вы не обладаете правами на изображения, примите это.

Возможно, права на все из них принадлежат не мне, но мои пользователи — да. Не совсем понимаю, к чему вы клоните. Они также выразили желание, чтобы эти изображения были сохранены от исчезновения ссылок.

ха-ха. пожалуйста, поймите, что я не пытаюсь вступить с вами в жаркий спор. у нас всё хорошо :slight_smile: :heart:. моё педантичное мнение на этот счёт

да, но его заблокировали только из-за запугивания. существует законный правовой аргумент против их утверждений. в любом случае, никто не продолжил давление на github, и это о чём-то говорит. нет организаций более жадных и злых, чем RIAA.

если вы считаете ответ EFF преобладающим правовым аргументом/теорией, которая убедила/подкрепила github отклонить претензии RIAA (безосновательные), то реальная причина гораздо сложнее, и фактически она даже отвергает утверждение об обходе защиты.

конечно, если правовые эксперты не считают, что youtube-dl нарушает определение обхода защиты согласно разделу 1201(a) DMCA, то подмена заголовка referer не может считаться таким обходом.

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

Но ни один здравомыслящий проект с открытым исходным кодом не рискнет быть заблокированным ex parte из-за какого-то юридического спора, даже если они правы или оказываются правы, а жалобщик нет. Поэтому я считаю, что скрипт импорта — правильное место для этого.