J’ai effectué une recherche mais je n’ai trouvé aucun sujet à ce sujet.
Je souhaite désactiver le téléchargement via des liens externes. Autrement dit, je ne compte pas restreindre le privilège de téléchargement aux seuls utilisateurs inscrits ; je suis d’accord pour que n’importe qui puisse télécharger les ressources sur mon site Discourse, mais j’aimerais qu’ils visitent au moins le site et consultent le sujet.
Actuellement, si un fichier est téléchargé sur Discourse, quelqu’un peut simplement publier le lien vers ce fichier ailleurs et les gens peuvent le télécharger sans même savoir qu’il provient de mon site. Existe-t-il un moyen d’atteindre cet objectif ?
Non, il s’agit d’un scénario différent : cela empêche tout utilisateur non connecté de télécharger. Ce que je cherche à obtenir, c’est d’empêcher le téléchargement depuis un lien vers une ressource locale provenant d’un autre site web. Pour les visiteurs de mon site, ils peuvent télécharger, qu’ils soient enregistrés ou non.
On ne peut sécuriser un média ou pas. Si ce n’est pas sécurisé, n’importe qui peut bien sûr utiliser le lien sans afficher votre interface utilisateur ? Le navigateur ne se soucie pas des pages qu’il a visitées auparavant.
Si les ressources ont de la valeur, pourquoi ne pas les sécuriser et distribuer le lien vers le sujet dans lequel elles sont intégrées ? Cela offrirait une incitation supplémentaire à s’inscrire sur votre site.
Le navigateur ne s’en soucie pas, mais le serveur le peut. Par défaut, lorsqu’un navigateur envoie une requête vers la même origine que la page contenant la référence, il inclut un en-tête de référent pour indiquer au serveur d’où il vient. Un serveur peut utiliser cette information pour influencer le comportement, notamment en autorisant ou en refusant l’accès à certains emplacements.
Il est facile de contourner cela, mais cela empêche le lien accidentel depuis d’autres sites web.
Remplacer www.example.com dans le code ci-dessus par le domaine de votre instance Discourse devrait constituer une configuration nginx appropriée pour empêcher le hotlinking vers les fichiers uploadés de votre instance.
Vous voudrez peut-être faire quelque chose de différent que de renvoyer une erreur 403 (non autorisé). Par exemple, vous pourriez souhaiter rediriger vers la page d’accueil de votre instance Discourse. Pour cela, vous pouvez utiliser le code suivant à la place.
Il devrait être possible d’ajouter quelque chose à votre fichier app.yml pour injecter la configuration lors d’une reconstruction. Cependant, je ne suis pas sûr de la façon de le faire, car je n’ai pas examiné cela en détail.
Salut ! J’avais bien un paragraphe sur la redirection, mais j’ai modifié mon message précédent pour le rendre plus clair en utilisant un exemple complet.
Merci pour le partage, Simon. Cela pourrait être la solution pour mes besoins, même si je ne sais pas encore comment l’appliquer avec Discourse. Je connais un peu les serveurs Linux et Apache, mais Discourse utilise Docker et Nginx, qui sont tous deux hors de ma portée. Quoi qu’il en soit, Simon nous a indiqué une direction, et je vais explorer cela pour voir si je peux faire quelque chose.
Il s’avère que la configuration que Discourse utilise pour nginx inclut déjà une option pour le hotlinking, bien qu’elle soit commentée. Vous pouvez donc ajouter quelques remplacements dans votre fichier app.yml pour décommenter ces lignes.
Éditez /var/discourse/containers/app.yml avec votre éditeur préféré. À la fin, vous trouverez une section run, et à la fin de celle-ci, un exec qui affiche « end of custom commands ».
Dans la première section de remplacement, vous verrez la ligne to: contenant mysite.com *.mysite.com ; remplacez-les par votre propre nom de domaine, par exemple discourse.org *.discourse.org. La deuxième section de remplacement suppose que vous souhaitez rediriger les visiteurs vers la page d’accueil de Discourse.
Après avoir enregistré les modifications, exécutez les commandes suivantes pour reconstruire Discourse avec la configuration nginx mise à jour.