Функция защищённых загрузок (Secure Uploads), добавленная в выпуске Discourse 2.4 в феврале, обеспечивает повышенный уровень безопасности для ВСЕХ загрузок (изображения, видео, аудио, текст, PDF, ZIP-архивы и другие) в рамках экземпляра Discourse.
Требования
На вашем сайте должны быть включены загрузки через S3, для чего необходимо заполнить следующие настройки:
- Идентификатор ключа доступа S3 (S3 access key id)
- Секретный ключ доступа S3 (S3 secret access key)
- Регион S3
- Ведро для загрузок S3 (S3 upload bucket)
Также вы должны использовать ведро S3, у которого отсутствует публичная политика доступа (Public bucket policy), и убедиться, что все существующие загрузки имеют ACL с правом публичного чтения (public-read S3 ACL). См. раздел «Включение защищённых загрузок» ниже.
После выполнения этих требований вы можете включить настройку сайта «secure uploads».
Включение защищённых загрузок
ОСТОРОЖНО: ЗДЕСЬ ОБИТАЮТ ДРАКОНЫ
![]()
Это расширенная функция, и поддержка за пределами нашего тарифа Enterprise будет крайне ограничена. Включайте защищённые загрузки только если вы опытный пользователь.
Для включения защищённых загрузок выполните следующие шаги:
- Убедитесь, что у вас настроены загрузки через S3.
- Проверьте, есть ли у вашего ведра S3 публичная политика доступа. Если есть, потребуется дополнительный шаг (шаг 4).
- Запустите задачу Rake
uploads:sync_s3_acls. Это гарантирует, что все ваши загрузки имеют правильные ACL в S3. Это важно: если выполнить шаг 4 до этого, некоторые загрузки могут стать недоступными на вашем форуме. - Удалите публичную политику доступа из вашего ведра, если она присутствовала на шаге 1.
- Включите настройку сайта «secure uploads». При желании включите настройку «предотвращать анонимных пользователей от загрузки файлов», чтобы запретить анонимным пользователям скачивать вложения из публичных тем. Все загрузки, сделанные с этого момента, могут быть помечены как защищённые в зависимости от условий ниже.
- Если вы хотите, чтобы все существующие загрузки были проанализированы и, возможно, помечены как защищённые, запустите задачу Rake
uploads:secure_upload_analyse_and_update.
Примечание о политике доступа к ведру S3 
Убедитесь, что ведро, в которое вы загружаете файлы, не имеет публичной политики доступа. Публичная политика доступа будет выглядеть примерно так:
{
"Version": "2012-10-17",
"Id": "ComputedBucketPolicy",
"Statement": [
{
"Sid": "AllowWorldRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
Ключевой момент здесь — разрешение * на выполнение действия GetObject, что означает возможность любому пользователю скачивать любые файлы из ведра. Этот статус также отображается в интерфейсе, если политика является публичной:
Эти настройки не следует изменять. На изображении показан идеальный вариант для вкладки «Блокировать публичный доступ»:
Что это делает
После включения функции защищённых загрузок любой файл, загруженный через композер, будет помечен как защищённый или незащищённый в зависимости от следующих критериев:
- Если у вас включена настройка сайта «требуется вход», все загрузки будут помечены как защищённые, и анонимные пользователи не смогут получить к ним доступ.
- Если вы загружаете что-либо в рамках личного сообщения, оно будет помечено как защищённое.
- Если вы загружаете что-либо в теме, находящейся в приватной категории, оно будет помечено как защищённое.
Загрузка в S3 будет иметь приватный ACL, поэтому прямые ссылки на файл в S3 будут возвращать ошибку 403 «доступ запрещён». Любой доступ к защищённым загрузкам будет осуществляться через подписанную URL-адрес S3. Однако для ваших пользователей это будет скрыто: если загрузка защищена, любая ссылка на неё будет осуществляться через URL-адрес Discourse /secure-uploads/.
Разрешения и контроль доступа
URL-адрес /secure-uploads/ определяет, имеет ли текущий пользователь право доступа к медиафайлу, и обслуживает его, если право есть. При создании загрузки пост, в котором она впервые появилась, будет назначен её «постом контроля доступа», и все разрешения будут основываться на этом посте.
- Если у вас включена настройка сайта «требуется вход», анонимные пользователи всегда будут получать ошибку 404 при попытке доступа к URL.
- При доступе к медиафайлу, пост контроля доступа которого является личным сообщением, пользователь должен быть участником этой темы личного сообщения, иначе он получит ошибку 403.
- При доступе к медиафайлу, пост контроля доступа которого находится в теме внутри приватной категории, пользователь должен иметь доступ к этой категории, иначе он получит ошибку 403.
Копирование URL-адресов /secure-uploads/ между постами и темами не рекомендуется, так как у разных пользователей могут быть разные уровни доступа в вашем форуме Discourse. Новые загрузки всегда должны создаваться через композер. Oneboxes и изображения с прямой ссылкой также будут соблюдать правила защищённых загрузок. Настройки сайта, эмодзи и загрузки тем не затрагиваются защищёнными загрузками, так как они должны быть публичными.
Если пост контроля доступа будет удалён, прикреплённая к нему загрузка станет недоступной. ![]()
Перемещение постов с защищёнными загрузками
Если вы переместите «пост контроля доступа» между разными контекстами безопасности, то прикрепленная к нему загрузка может быть изменена на защищённую или незащищённую. Это ситуации, которые могут изменить уровень безопасности загрузки:
- Изменение категории темы. Будет выполнена проверка всех постов в теме и обновлён статус безопасности загрузок.
- Изменение статуса темы с публичной на личное сообщение (и наоборот). Будет выполнено то же самое.
- Перемещение постов из одной темы в новую или существующую другую тему. Будет выполнено то же самое для целевой темы.
Защищённые загрузки в письмах
Встраивание защищённых изображений в письма включено по умолчанию. Вы можете настроить следующие параметры сайта для дополнительного контроля:
secure_uploads_allow_embed_images_in_emails: Отключите это, чтобы скрыть защищённые изображения в письмах.secure_uploads_max_email_embed_image_size_kb: Максимальный размер защищённого изображения, которое будет встроено, по умолчанию 1 МБ, чтобы письмо не стало слишком большим. Максимум — 10 МБ. Работает в связке сemail_total_attachment_size_limit_kb.
Защищённые изображения будут добавляться как вложения к письму и встраиваться с использованием формата URL cid:, так как поддержка base64 URL в почтовых клиентах всё ещё нестабильна.
Если у вас не включена настройка secure_uploads_allow_embed_images_in_emails или если изображения превышают ограничения по размеру, вместо защищённых изображений (а также защищённых аудио и видео, которые не встраиваются) вы увидите следующее:
![]()
Клиенты с хостингом
На данный момент функция защищённых загрузок доступна только клиентам нашего тарифа Enterprise. Пожалуйста, свяжитесь с нами для получения дополнительной информации.


ADVANCED thing, not for the faint of
, and there is a limit to how much we will support it outside our enterprise tier. Bring your own expertise…
