Могу ли я запретить загрузку по внешним ссылкам?

Браузеру — нет, серверу — да. По умолчанию, когда браузер отправляет запрос к тому же источнику, что и страница, содержащая ссылку, он включает заголовок referrer, чтобы сообщить серверу, откуда он пришел. Сервер может использовать эту информацию для управления поведением, включая разрешение или запрет доступа к определенным ресурсам.

Обойти это легко, но такой механизм предотвращает случайные ссылки с других сайтов.

location /uploads/ {
    valid_referers  www.example.com;
    if ($invalid_referer) {
        return 403;
    }
}

Замена www.example.com в приведенном выше коде на домен вашего экземпляра Discourse должна стать подходящей конфигурацией nginx для предотвращения хотлинкинга к загрузкам на вашем экземпляре.

Возможно, вы захотите сделать что-то иное, чем возврат 403 (запрещено). Например, вы можете перенаправлять пользователей на главную страницу вашего экземпляра Discourse. Для этого можно использовать следующий код:

location /uploads/ {
    valid_referers  www.example.com;
    if ($invalid_referer) {
        return 307 /;
    }
}

Должна существовать возможность добавить что-то в ваш файл app.yml для внедрения этой конфигурации при пересборке. Однако я не уверен, как это сделать, так как не изучал этот вопрос подробно.

4 лайка