ich habe gesucht, konnte aber kein entsprechendes Thema finden.
Ich möchte Downloads über externe Links deaktivieren. Das bedeutet: Ich werde das Download-Recht nicht auf registrierte Benutzer beschränken. Es ist mir recht, wenn jeder die Ressourcen auf meiner Discourse-Website herunterladen kann, aber ich möchte, dass die Nutzer mindestens die Seite besuchen und das Thema ansehen.
Derzeit kann jemand, wenn eine Datei auf Discourse hochgeladen wurde, einfach den Link zu dieser Datei irgendwo posten, und andere können die Datei herunterladen, ohne zu wissen, dass sie von meiner Seite stammt. Gibt es eine Möglichkeit, dies zu verhindern?
Nein, hier liegt ein anderes Szenario vor: Es wird verhindert, dass nicht angemeldete Benutzer etwas herunterladen. Was ich erreichen möchte, ist, Downloads von Links zu lokalen Ressourcen auf anderen Websites zu blockieren. Besucher meiner Seite können jedoch unabhängig davon, ob sie registriert sind oder nicht, herunterladen.
Man kann Medien entweder sichern oder nicht. Wenn sie nicht gesichert sind, kann surely jeder den Link nutzen, ohne dass deine Benutzeroberfläche angezeigt wird? Der Browser interessiert sich nicht dafür, welche Seiten zuvor besucht wurden.
Wenn die Ressourcen wertvoll sind, warum sichert man sie dann nicht und verteilt den Link im jeweiligen Thema, in dem sie verlinkt sind? Das würde einen zusätzlichen Anreiz bieten, sich auf deiner Seite zu registrieren.
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.
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:
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.
Cheers, ich hatte zwar einen Absatz zum Umleiten, aber ich habe meinen vorherigen Beitrag bearbeitet, um ihn anhand eines vollständigen Beispiels klarer zu gestalten.
Danke für den Beitrag, Simon. Das könnte die Lösung für meine Anforderungen sein, auch wenn ich noch nicht weiß, wie man sie mit Discourse anwendet. Ich habe ein wenig Erfahrung mit Linux-Servern und Apache, aber Discourse nutzt Docker und Nginx, was beides außerhalb meines Wissensbereichs liegt. Aber Simon hat uns zumindest eine Richtung gezeigt, und ich werde mich damit beschäftigen, um zu sehen, ob ich etwas daraus machen kann.
Es stellt sich heraus, dass die Konfiguration, die Discourse für nginx verwendet, bereits eine Einstellung für Hotlinking enthält, die jedoch auskommentiert ist. Sie können also ein paar Ersetzungen in Ihre app.yml-Datei einfügen, um diese Zeilen zu aktivieren.
Bearbeiten Sie /var/discourse/containers/app.yml mit Ihrem bevorzugten Editor. Am Ende finden Sie einen Abschnitt „run", und am Ende dessen einen Befehl „exec", der „end of custom commands" ausgibt.
Fügen Sie vor diesem exec-Befehl folgende Zeilen hinzu:
Im ersten Ersetzungsteil sehen Sie die Zeile „to:" mit mysite.com *.mysite.com. Ersetzen Sie diese durch Ihre eigene Domain, z. B. discourse.org *.discourse.org. Der zweite Ersetzungsschritt geht davon aus, dass Besucher auf die Discourse-Startseite umgeleitet werden sollen.
Nachdem Sie die Änderungen gespeichert haben, führen Sie folgende Befehle aus, um Discourse mit der aktualisierten nginx-Konfiguration neu zu erstellen: