使用Referer下载远程图片(可能需要插件?)

我正在进行迁移到 Discourse 的工作,并且我知道 SiteSetting.download_remote_images_to_local。它很棒。

但是,当我(缓慢地)重新烘焙以下载所有图片时,我注意到 Photobucket 会根据你的引用者(referer)提供一张带水印的图片。

我简单看了一下,似乎下载是在 /lib/final_destination.rb 中处理的。我或许可以暂时修补它,仅用于迁移后的重新烘焙,但这并不能解决人们未来从糟糕的图片主机热链接图片的假设情况。我认为任何明智的人都知道现在不应该使用 Photobucket,而且我不知道还有其他会添加水印的,所以这可能不是什么大问题。

我的问题是……有人已经解决过这个问题了吗?这是一个插件可以完成的事情吗? 我还没有学习过插件是如何工作的。

或者,将引用者(referrer)始终设置为 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'

我不喜欢他们添加水印,但实际上,发送虚假推荐人来隐藏水印会违反 Photobucket 的服务条款,因为免费账户的要求之一是使用他们进行托管时必须包含水印。付费账户不会添加这些水印。

1 个赞

什么?

你是怎么得出这个结论的?仅仅下载一张图片而没有账户(甚至没有进行身份验证)的第三方,并没有同意任何服务条款。服务条款甚至没有向该第三方出示过。

服务条款适用于上传者。具体来说:

免费账户不允许托管图片。在我们自行决定允许免费账户托管图片的情况下,图片将包含一个 水印,表明图片由我们托管。如果我们允许任何免费图片托管,我们将自行决定保留阻止图片或模糊和 添加水印 的权利。强烈建议免费账户持有者升级到允许第三方托管的付费账户。

此外,这仅仅是陈述账户 能力(“免费账户不允许托管图片……如果我们允许任何免费图片托管……”),账户持有者同意此条款仅仅表示他们已了解此情况。如果我有一个免费的 Photobucket 账户并上传了那张图片,即使在此主题中热链接它,我也不会违约,因为该条款并没有暗示我必须同意不采取此类行动。此声明的目的是为了让免费账户持有者不能,例如,起诉 Photobucket 服务拒绝。

对比我编造的以下陈述,该陈述并未出现在他们实际的服务条款中:

免费账户持有者同意不将账户用于图片托管,并且不会在其他地方热链接图片。

我的一个朋友在他的实例上做了你建议的事情,结果 Photobucket 阻止了他的服务器。让我看看能不能找到他们发给他的电子邮件副本。

1 个赞

恕我直言,这在法律上并不违反服务条款,但 Photobucket 当然可以自行决定拒绝向任何人提供服务(除非有合同义务)。我很想看看那封邮件。Photobucket 是从他服务器的联系部分获取了他的电子邮件地址,还是别的什么?

非常感谢你的警告!当我迁移所有 Photobucket 图片(在最终迁移时)时,我一定会通过代理或其他方式进行。不过,这其实也无关紧要,哈哈。现在没人用 Photobucket 了。我也不会在生产服务器上保留 Referer 欺骗,但希望未来新内容不再需要它。

虽然这不违反服务条款,但绕过用于保护图像版权或控制对原始图像访问的方法可能违反《数字千年版权法案》(DMCA)(或其他国家/地区的版权法)。

我认为伪造引用者标头(referer header forgery)不算“良好的网络公民行为”,如果 DMCA 确实适用,分发此类软件甚至是非法的。

许多导入脚本都有自己的附件下载代码,您是否考虑过创建一个正则表达式并将该逻辑应用于内联的 Photobucket 图片,包括引用者?

我不认为版权侵权或规避在此案中适用,因为服务条款规定上传者保留所有权利(尽管可能在某些地区触发了某些法律)。但是,我明白尊重标准浏览行为并成为“良好网络公民”的观点——这样说来,我认为将 Referer 欺骗作为一项官方功能发布是没有意义的。

是的,我应该能够(在没有水印的情况下)提取图片以进行迁移。在我的 phpbb 导入器的情况下,我认为最简单的方法是暂时修改 Discourse 本身,在下载远程图片时欺骗 Referer,然后进行重新烘焙,因为导入器(除了头像之外)不处理保存远程图片。

我主要是想听听以前处理过这个问题的人的意见。我还好奇插件是否可以在技术上实现这一点(仍在想),以及 Discourse 是否有官方发布此类功能(它没有)的意义。

1 个赞

[quote=“shyguy, post:7, topic:260027”]
版权侵犯或规避
[/quote]上传者保留其权利——包括控制内容使用和分发方式的权利——但这并不意味着他人可以在未经许可的情况下修改或删除其内容上的水印。

《数字千年版权法》(DMCA)也涵盖了访问控制,这在此处适用(即,只有当图片被其广告包围时,他们才有权在不带水印的情况下提供该图片,而移除该机制就是以他们不希望的方式访问该图片)。

1 个赞

哈哈,也许吧。但请考虑像 youtube-dl 这样的东西仍然在 GitHub 上。与此相比,伪造 Referer 看起来相当无辜,相信我,RIAA 确实试图让它被撤下。如果你关注这类新闻,它曾经“登上过新闻”。

让我换个说法:youtube-dl 并不是仍然可用,而是在被下架后恢复可用了。

而且这仅仅是因为存在合法的用例。

这并不意味着所有用途都是合法的。

请认识到,您不拥有这些图像的权利。

我可能不拥有所有图片的版权,但我的用户拥有。不过,我不确定你的意思是什么。他们也表示希望防止链接失效。

1 个赞

哈哈。请理解我无意与你们争论。我们都很友好 :slight_smile: :heart:。不过,我还是想就此提出我过于较真的看法:

是的,但之所以被下架,仅仅是因为恐吓策略。针对他们的说法,存在合法的法律论点。无论如何,GitHub 上没有人进一步追究,这本身就说明了一些问题。没有什么实体比 RIAA(美国唱片业协会)更贪婪和恶毒了。

如果你认为 EFF 的回应 是说服/鼓励 GitHub 拒绝 RIAA(虚假)主张的、占主导地位的法律论点/理论,那么真正的原因会更复杂,甚至会否定规避的说法。

当然,如果法律专家不认为 youtube-dl 违反了 DMCA 1201(a) 的规避定义,那么伪造引荐来源就不可能被视为此类规避。

当然不一定如此,但你至少可以假设你的用户在将内容发布到你的论坛时已经授予了你许可,所以这将是他们的问题,而不是你的问题。因此,你的用例是合法的,我对此100%确信。

但是,没有哪个理智的开源项目会因为一些法律争论而冒险被单方面撤下,即使他们是正确的/最终被证明是正确的,而投诉者不是。所以我认为导入脚本是处理这种情况的正确地方。

1 个赞