Ho cercato ma non sono riuscito a trovare alcun argomento su questo.
Voglio disabilitare il download da link esterni, ovvero non intendo limitare il privilegio di download agli utenti registrati; va bene che chiunque possa scaricare le risorse dal mio sito Discourse, ma vorrei che almeno visitassero il sito e vedessero l’argomento.
Attualmente, se viene caricato un file su Discourse, qualcuno può semplicemente pubblicare il link al file da qualche parte e le persone possono scaricarlo senza nemmeno sapere che proviene dal mio sito. C’è un modo per ottenere questo risultato?
No, si tratta di uno scenario diverso: questa opzione impedisce a qualsiasi utente non registrato di scaricare. Ciò che cerco è evitare il download tramite un link alla risorsa locale da altri siti web. Per i visitatori del mio sito, il download è consentito sia per gli utenti registrati che per quelli non registrati.
Puoi solo proteggere i media o non farlo. Se non sono protetti, chiunque può sicuramente utilizzare il link senza mostrare la tua interfaccia utente? Il browser non si cura delle pagine che ha visitato in precedenza.
Se le risorse sono preziose, perché non proteggerle e distribuire il link all’argomento a cui sono collegate? Questo fornirebbe un ulteriore incentivo per registrarsi sul tuo sito?
Il browser no, il server sì. Per impostazione predefinita, quando un browser invia una richiesta allo stesso origin della pagina che contiene il riferimento, includerà un’intestazione referrer per indicare al server da dove proviene. Un server può utilizzare queste informazioni per influenzare il comportamento, inclusa la concessione o il diniego dell’accesso a determinate posizioni.
È facile aggirare questa misura, ma previene i collegamenti casuali da altri siti web.
Sostituendo www.example.com nel codice sopra con il dominio della tua istanza di Discourse, dovresti ottenere una configurazione nginx appropriata per prevenire il hotlinking ai file caricati sulla tua istanza.
Potresti anche voler fare qualcosa di diverso dal restituire un 403 (non consentito); ad esempio, potresti voler reindirizzare alla home page del tuo Discourse. Per farlo, potresti utilizzare invece il seguente codice.
Dovrebbe essere possibile aggiungere qualcosa al tuo file app.yml per iniettare la configurazione durante una ricostruzione. Non sono sicuro di come fare questa parte, non l’ho approfondita in dettaglio.
Grazie per la condivisione, Simon. Questa potrebbe essere la soluzione per le mie esigenze, anche se non so ancora come applicarla con Discourse. So un po’ di server Linux e Apache, ma Discourse utilizza Docker e Nginx, entrambi al di fuori delle mie competenze. Comunque, Simon ci ha indicato una direzione e lo esaminerò per vedere se posso fare qualcosa.
Si scopre che la configurazione che Discourse utilizza per nginx include già qualcosa per il hotlinking, anche se è commentato. Quindi quello che puoi fare è aggiungere un paio di sostituzioni al tuo file app.yml per decommentare quelle righe.
Modifica /var/discourse/containers/app.yml con il tuo editor preferito. Alla fine troverai una sezione run e alla fine di quella troverai un exec per echo “end of custom commands”.
Nella prima sezione di sostituzione vedrai la riga “to:” con mysite.com *.mysite.com; sostituiscile con il tuo nome di dominio, ad esempio discourse.org *.discourse.org. La seconda sostituzione presuppone che tu voglia che i visitatori vengano reindirizzati alla home page di Discourse.
Dopo aver salvato le modifiche, esegui i seguenti comandi per ricostruire Discourse con la configurazione nginx aggiornata.