Пользователи, не входящие в группы, разрешенные для публикации встроенных медиа, могут обойти ограничение на загрузку, скопировав ссылку на загруженное изображение

Шаги для воспроизведения

  1. Установите Newuser max embedded media = 0
  • Это корректно запрещает новым пользователям загружать изображения до их загрузки :white_check_mark:
  1. Настройте Embedded media post allowed groups
  • Исключите определённые группы из разрешённого списка
  • Когда пользователь не входящий в разрешённые группы загружает изображение:
    • Изображение может появиться в редакторе
    • Блокировка происходит только при отправке сообщения :cross_mark:
  1. Проблема
  • Во время редактирования пользователь может скопировать ссылку на загруженное изображение, чтобы обойти ограничение на загрузку и опубликовать его

Ожидаемое поведение

Наша цель — предотвратить загрузку изображений пользователями. Пользователи, не входящие в разрешённые группы, не должны иметь возможности вставлять любые встроенные медиа в редактор вообще — загрузка должна блокироваться в момент её выполнения, как это происходит при установке Newuser max embedded media = 0.

В противном случае они могут скопировать ссылку на загруженное изображение и фактически обойти ограничение на загрузку.

Не знаю, является ли это новой проблемой, но мы тоже только что это заметили:

Кажется, что загрузка изображения в бакет S3 (cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com) происходит сразу же после вставки изображения. Проверка встраивания выполняется только при отправке сообщения, но к этому моменту изображение уже существует в бакете, и к нему можно получить ссылку любым из следующих способов:

  • По его URL в S3
  • По короткому URL Discourse
  • По сгенерированному URL upload:// (то есть просто удалив ! в начале автоматически сгенерированного кода встраивания загрузки)

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

К сожалению, эта ошибка, похоже, не исправлялась уже довольно давно.