Referer와 함께 원격 이미지 다운로드 (플러그인으로 가능할까요?)

Discourse로 마이그레이션을 진행 중인데, SiteSetting.download_remote_images_to_local 옵션에 대해 알고 있습니다. 정말 유용하죠.

하지만 제가 (느리게) rebake를 실행하여 모든 이미지를 다운로드하는 동안, Photobucket이 리퍼러(referer)에 따라 워터마크가 포함된 이미지를 서빙한다는 것을 발견했습니다.

간단히 살펴보니, 다운로드 처리는 /lib/final_destination.rb에서 이루어지는 것 같습니다. 마이그레이션 후의 rebake를 위해 해당 파일을 임시로 패치할 수는 있겠지만, 앞으로 사람들이 저질스러운 이미지 호스트에서 이미지를 핫링크(hotlink)하는 가상의 상황을 처리하지는 못합니다. 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'

그들이 사용하는 워터마킹 방식은 별로 좋아하지 않지만, 워터마킹을 숨기기 위해 가짜 리퍼러를 보내는 것은 실제로 Photobucket의 이용약관을 위반하게 됩니다. 무료 계정의 요구 사항 중 하나는 호스팅으로 사용할 때 워터마킹이 포함되어야 한다는 것이며, 유료 계정에는 이러한 워터마킹이 추가되지 않습니다.

뭐라고?

어떻게 그런 결론을 내린 거죠? 계정이 없거나(심지어 인증조차 없이) 단순히 이미지를 다운로드하는 당사자는 서비스 약관에 동의한 적이 없으며, 심지어 해당 약관을 제시받은 적도 없잖아요.

해당 약관은 업로더에게 적용됩니다. 구체적으로 다음과 같습니다:

무료 계정은 이미지 호스팅을 허용하지 않습니다. 당사의 전권과 절대적인 재량에 따라 무료 계정이 이미지를 호스팅하도록 허용하는 경우, 해당 이미지는 당사가 호스팅하고 있음을 나타내는 Photobucket 워터마크가 포함됩니다. 무료 이미지 호스팅을 허용하는 경우, 당사는 전권과 절대적인 재량에 따라 이미지를 차단하거나 흐리게 처리하고 워터마크를 추가할 권리를 보유합니다. 무료 계정 소유자는 제3자 호스팅을 허용하는 유료 계정으로 업그레이드하는 것이 강력히 권장됩니다.

또한, 이것은 계정 기능에 대한 단순한 고지(“무료 계정은 이미지 호스팅을 허용하지 않습니다… 만약 무료 이미지 호스팅을 허용하는 경우…”)일 뿐이며, 동의함으로써 계정 소유자는 단지 이를 인지하게 된 것입니다. 만약 제가 무료 Photobucket 계정을 가지고 해당 이미지를 업로드했다면, 이 언어는 제가 그러한 행동을 하지 않기로 동의해야 함을 시사하지 않으므로, 이 토픽에서 핫링크를 사용하여도 위반이 되지 않을 것입니다. 이 문장의 목적은 무료 계정 소유자가 예를 들어 서비스 거절을 이유로 Photobucket을 고소할 수 없도록 하는 것입니다.

반면, 제가 지어낸 것으로 실제 약관에 존재하지 않는 다음 문장을 비교해 보세요:

무료 계정 소유자는 계정을 이미지 호스팅에 사용하지 않기로 동의하며, 다른 곳에 이미지를 핫링크하지 않기로 합니다.

제 친구가 인스턴스에서 정확히 그걸 시도했는데 Photobucket이 서버를 차단했어요. 그에게 보낸 이메일 사본을 찾아볼게요.

개인적으로 이는 ToS(이용약관) 위반에 해당하지 않는다고 생각하지만, Photobucket은 계약상 의무가 없는 한 누구에게든 자의적으로 서비스를 거부할 수 있는 권리가 있습니다. 해당 이메일 내용을 보고 싶네요. Photobucket이 서버의 연락처 섹션 등에서 그의 이메일 주소를 얻은 건가요?

경고해 주셔서 정말 감사합니다! 최종 마이그레이션 시 Photobucket 이미지를 모두 제거할 때 프록시 등을 통해 진행하겠습니다. 물론 큰 차이는 없겠지만요, lol. 요즘 Photobucket을 쓰는 사람은 거의 없으니까요. 또한 프로덕션 서버에는 리퍼러 스푸핑을 남기지 않을 계획이며, 앞으로의 신규 콘텐츠에는 아마도 그런 조치가 필요하지 않을 것으로 기대합니다.

ToS(이용약관) 위반은 아닐 수 있지만, 이미지의 저작권을 보호하거나 원본 이미지 접근을 제어하는 방법을 우회하는 행위는 DMCA 위반(또는 다른 국가의 저작권법 위반)에 해당할 수 있습니다.

레퍼러 헤더 위조는 "좋은 웹 시민"으로서의 행동에 해당한다고 생각하지 않습니다. 그리고 DMCA가 실제로 적용된다면, 그러한 소프트웨어를 배포하는 것 자체가 불법이 될 수 있습니다.

많은 가져오기(import) 스크립트는 첨부 파일 다운로드를 위한 자체 코드를 갖추고 있습니다. 인라인 Photobucket 이미지에 대해서도 정규식(regexp)을 생성하고 해당 로직을 적용하여 레퍼러를 포함하는 방식을 고려해 보셨습니까?

이 경우 저작권 침해나 우회가 적용되지 않는다고 생각합니다. ToS(서비스 약관)에 업로더가 모든 권리를 보유한다고 명시되어 있기 때문이죠(다만 어떤 지역에서든 특정 법률이 간접적으로 적용될 가능성은 있습니다). 하지만 표준적인 브라우저 동작을 존중하고 "좋은 웹 시민"이 되어야 한다는 지적에는 동의합니다. 그렇게 말씀해 주시니, 리퍼러 스푸핑을 공식 기능으로 포함하는 것은 의미가 없다고 생각합니다.

네, 마이그레이션을 위해 워터마크 없이 이미지를 가져오는 것은 제가 처리할 수 있을 것 같습니다. 제 경우처럼 phpbb 가져오기 도구를 사용할 때는, 가져오기 도구가 원격 이미지 저장(아바타 제외)을 처리하지 않기 때문에, 원격 이미지를 다운로드할 때 리퍼러를 스푸핑하도록 Discourse 자체를 일시적으로 수정하고 리베이킹(rebake)하는 것이 가장 쉽다고 생각합니다.

주로 이전에 이 문제를 해결해 보신 분들의 의견을 듣고 싶었습니다. 또한 플러그인으로 이를 구현하는 것이 기술적으로 가능한지(여전히 궁금합니다) 그리고 Discourse가 공식적으로 이러한 기능을 포함하는 것이 의미가 있는지(의미가 없습니다)도 궁금했습니다.

업로드한 사람이 자신의 권리를 — 사용 및 배포 방식을 통제할 권리 포함 — 유지한다는 사실은, 다른 사람이 허락 없이 해당 콘텐츠에서 워터마크를 수정하거나 제거할 권리를 부여하지 않습니다.

DMCA는 접근 통제도 포함하며, 이는 여기에도 적용됩니다(즉, 그들은 자신의 광고로 둘러싸인 경우에만 워터마크가 없는 이미지를 제공할 권리를 가지며, 그 메커니즘을 제거하는 것은 그들이 원하는 방식과 다른 방법으로 이미지에 접근하는 것입니다).

하하, 아마도 그렇겠죠. 하지만 youtube-dl 같은 것이 여전히 GitHub에 올라와 있다는 점을 고려해 보세요. 그렇게 하면 리퍼러 스푸핑은 상대적으로 아주 무해해 보입니다. 믿거나 말거나, RIAA는 실제로 이를 제거하려고 많이 노력했거든요. 그런 종류의 뉴스를 따라간다면, 한동안 "뉴스"에 오르기도 했었죠.

다시 말해, youtube-dl은 여전히 운영 중인 것이 아니라, 중단된 후 다시 복구된 것입니다.

그리고 그것은 합법적인 사용 사례가 존재하기 때문입니다.

그렇다고 해서 모든 사용이 합법적이라는 뜻은 아닙니다.

이미지에 대한 권리를 소유하고 있지 않다는 점을 인정해 주세요.

전 그 모든 이미지에 대한 권리를 소유하지는 않을 수 있지만, 제 사용자들은 소유하고 있습니다. 그런데 그걸 왜 말씀하시는지 잘 모르겠네요. 또한 사용자들은 링크가 깨지는 것을 방지하기 위해 이미지들이 보존되기를 원한다고도 표현했습니다.

하하. 우리랑 격렬한 논쟁을 벌이려는 게 아니라는 걸 이해해 줘. 여기 다들 좋은 사이잖아 :slight_smile: :heart:. 다만, 좀 까탈스럽게 보일 수 있는 내 의견은 이렇거든.

그래, 하지만 그건 공포 마케팅 때문에 내려진 거지. 그들의 주장에 대해 정당한 법적 논거가 존재해. 어쨌든, 아무도 GitHub에서 더 이상 압박하지 않았고, 그 자체로 의미 있는 일이야. RIAA보다 더 탐욕스럽고 악의적인 단체는 별로 없거든.

만약 EFF의 회신을 RIAA의 (근거 없는) 주장을 기각하도록 GitHub을 설득하거나 용기를 준 지배적인 법적 논거/이론으로 본다면, 진짜 이유는 그보다 더 복잡하고, 사실은 우회(회피) 주장 자체를 거부하고 있어.

법률 전문가들이 youtube-dl이 DMCA 1201(a)의 우회(회피) 정의에 위배된다고 믿지 않는다면, 리퍼러를 위조하는 행위를 그런 우회(회피)로 볼 수 없다는 건 당연한 거 아니야?

물론 반드시 그렇지는 않지만, 사용자가 포럼에 게시한 시점부터 적어도 그들에게 라이선스를 부여했다고 가정할 수 있으므로, 이는 그들의 문제이지 당신의 문제가 아닙니다. 따라서 이 기능에 대한 당신의 사용 사례는 정당하다고 100% 확신합니다.

하지만 아무리 법적 논쟁에서 그들이 옳고 불평한 쪽이 옳지 않음이 밝혀지더라도, 일방적(ex parte) 삭제 처분을 받을 위험을 감수하는 건전한 오픈소스 프로젝트는 없을 것입니다. 따라서 저는 이 기능의 적절한 위치가 가져오기(import) 스크립트라고 생각합니다.