Kann ich Downloads von externen Links verbieten?

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.

4 „Gefällt mir“