¿Puedo prohibir la descarga de enlaces externos?

El navegador no, pero el servidor sí. Por defecto, cuando un navegador realiza una solicitud al mismo origen que la página que contiene la referencia, incluirá una cabecera de referidor para indicar al servidor de dónde proviene. Un servidor puede utilizar esta información para influir en su comportamiento, incluyendo permitir o denegar el acceso a ciertas ubicaciones.

Es fácil eludirlo, pero evita la vinculación casual desde otros sitios web.

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

Sustituir www.example.com en el código anterior por el dominio de tu instancia de Discourse debería ser una configuración de nginx adecuada para evitar la vinculación directa (hotlinking) a las subidas en tu instancia.

También podrías querer hacer algo diferente a devolver un 403 (no permitido); por ejemplo, podrías querer redirigir a la página de inicio de tu Discourse. Para ello, podrías utilizar el siguiente código en su lugar.

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

Debería ser posible añadir algo a tu archivo app.yml para inyectar la configuración durante una reconstrucción. Sin embargo, no estoy seguro de cómo hacerlo, ya que no lo he investigado en gran detalle.

4 Me gusta