Dem Browser ist es egal, aber dem Server nicht. Standardmäßig sendet ein Browser beim Anfordern einer Ressource von derselben Herkunft wie die Seite mit dem Verweis einen „Referrer"-Header, um dem Server mitzuteilen, woher die Anfrage stammt. Ein Server kann diese Informationen nutzen, um sein Verhalten zu steuern, einschließlich des Zu- oder Verweigens des Zugriffs auf bestimmte Bereiche.
Es ist einfach, diese Maßnahme zu umgehen, aber sie verhindert das gelegentliche direkte Verlinken von anderen Websites.
location /uploads/ {
valid_referers www.example.com;
if ($invalid_referer) {
return 403;
}
}
Das Ersetzen von www.example.com im obigen Code durch die Domain Ihrer Discourse-Instanz sollte eine geeignete nginx-Konfiguration sein, um Hotlinking zu den Uploads Ihrer Instanz zu verhindern.
Möglicherweise möchten Sie auch etwas anderes als eine 403-Fehlermeldung (nicht erlaubt) zurückgeben. Beispielsweise könnten Sie eine Weiterleitung auf die Startseite Ihrer Discourse-Instanz einrichten. Dafür können Sie stattdessen folgenden Code verwenden:
location /uploads/ {
valid_referers www.example.com;
if ($invalid_referer) {
return 307 /;
}
}
Es sollte möglich sein, Ihrer app.yml-Datei etwas hinzuzufügen, um die Konfiguration während eines Neubuilds einzufügen. Wie das genau funktioniert, weiß ich jedoch nicht, da ich mich damit noch nicht im Detail beschäftigt habe.