스팸 메일에 업로드된 이미지를 사용하는 스팸러. 해결 방법이 있을까요?

저는 Discourse를 설치해서 사용하고 있으며, 매우 만족하고 있습니다. 최근 스팸러들이 내장된 스팸 방지 기능을 우회하는 방법을 찾아냈습니다. 문제는 그들이 게시글에 이미지를 업로드한 후, 즉시 해당 이미지를 수천 명에게 보내는 스팸 이메일에 임베드한다는 점입니다. 게시글을 삭제해도 이 이미지들은 적어도 상당한 시간 동안 여전히 접근 가능한 상태인 것 같습니다.
이로 인해 호스팅 업체로부터 스팸 남용에 대한 불만이 접수되었습니다.

현재 저는 신규 사용자의 이미지 업로드를 비활성화해 두었지만, 이는 지원 포럼인 만큼 좋은 해결책이 아닙니다. 사람들은 첫 게시글에 스크린샷 등을 첨부할 필요가 있기 때문입니다.

이 문제를 해결할 수 있는 실용적인 방법을 찾으신 분이 계신가요?

이미 ^/uploads에 대한 valid_referers 명령의 주석을 해제해 보았지만, 아무런 효과가 없는 것 같습니다. 이미지는 여전히 임베드됩니다:

   location ~ ^/uploads/ {

      # NOTE: 헤더를 최상위 수준에서 정의하고 상속할 수 없다는 것이 정말 짜증스럽습니다.
      #
      # proxy_set_header는 설계상 상속되지 않으므로, 헤더가 올바르게 설정되지 않도록 반복해야 합니다.
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Request-Start "t=${msec}";
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $thescheme;
      proxy_set_header X-Sendfile-Type X-Accel-Redirect;
      proxy_set_header X-Accel-Mapping $public/=/downloads/;
      expires 1y;
      add_header Cache-Control public,immutable;

      ## 선택적 업로드 안티-핫링크 규칙
      valid_referers folivora.ai *.folivora.ai *.llo.ai;
      if ($invalid_referer) { return 403; }

      # 커스텀 CSS
      location ~ /stylesheet-cache/ {
          add_header Access-Control-Allow-Origin *;
          try_files $uri =404;
      }
      # 이를 통해 rails를 우회할 수 있습니다
      location ~* \.(gif|png|jpg|jpeg|bmp|tif|tiff|ico||avif)$ {
          add_header Access-Control-Allow-Origin *;
          try_files $uri =404;
      }
      # SVG에는 추가 헤더가 필요합니다
      location ~* \.(svg)$ {
      }
      # 썸네일 및 최적화된 이미지
      location ~ /_?optimized/ {
          add_header Access-Control-Allow-Origin *;
          try_files $uri =404;
      }

      proxy_pass http://discourse;
      break;
    }

음, 좀 까다로운 문제네요. :thinking:

게시글을 편집해서 이미지를 제거하면(삭제된 경우든 다른 방식으로든) 최신 버전의 게시글에 포함되지 않게 되므로, clean orphan uploads grace period hours를 최소값인 1시간으로 설정하면 삭제 속도가 빨라질 수 있습니다.

다만, 사용 편의성이나 즉각성 면에서 이상적인 해결책은 아닙니다.

이미 1시간으로 설정해 두었는데, 스팸 이메일을 정말 빠르게 보내는 것 같습니다…

업로드에 S3를 내 서버 대신 사용하는 것이 문제를 해결할 수 있을까요? 업로드된 이미지의 열람을 로그인한 사용자에게만 허용하는 방법이 있을까요?

일부 도움이 될 수 있는 ‘Secure Uploads(보안 업로드)’ 기능이 있습니다:

https://meta.discourse.org/t/secure-uploads/meta/140017

다만, 이는 고급 설정이며 제가 너무 잘 알고 있는 분야는 아닙니다.


사실 다시 읽어보니, 이 경우엔 적합하지 않을 수도 있습니다:

그럼 기능 요청으로 등록하는 게 좋겠네요.

기본적으로 두 가지가 필요할 것 같습니다.

  • 사용자가 삭제되면 (프로필 사진 포함) 이미지를 즉시 삭제할 수 있는 기능
  • 사용자가 검토 대상으로 지정되면 이미지를 즉시 삭제하거나 보호할 수 있는 기능

이 기능을 사용하면 이미지를 쉽고 빠르게 영구적으로 삭제할 수 있습니다.

감사합니다, 시도해 볼게요. 이미지도 영구적으로 삭제된다고 확신하나요?

이 기능이 게시물을 삭제하고, 업로드된 파일도 위의 메서드와 유사한 방식으로 clean orphan uploads grace period hours를 사용해 처리된다고 생각합니다.

또한, 같은 관리자가 소프트 삭제 후 영구 삭제를 수행할 경우 5분의 내장 지연 시간이 있습니다(다만, 다른 관리자가 수행하는 경우에는 동일한 대기 시간이 적용되지 않습니다).

어쨌든 시도해 볼 가치가 있습니다. :crossed_fingers:

네. 그리고 위에 다른 사람이 말했듯이 5분 정도 기다려야 해요. 즉시 처리하려면 다른 관리자 계정을 사용하면 됩니다. 이미지가 영구적으로 삭제됩니다.

NGINX 설정에 뭔가 문제가 있는 것 같습니다. :thinking:

포럼의 이미지를 새 탭에서 열려고 하면, Referer를 전달하지 않았는데도 이미지가 정상적으로 로드됩니다. 이런 상태라면 스팸 문제를 대부분 해결할 수 있을 텐데, 스팸이 포럼의 이미지를 핫링크로 가져갈 수 없기 때문입니다.