Posso vietare il download da link esterni?

Ciao,

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?

Grazie mille.
Jian

2 Mi Piace

Forse questo può aiutare?

3 Mi Piace

Grazie per la risposta.

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.

1 Mi Piace

Sono semanticamente la stessa cosa?

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?

1 Mi Piace

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.

location /uploads/ {
    valid_referers  www.example.com;
    if ($invalid_referer) {
        return 403;
    }
}

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.

location /uploads/ {
    valid_referers  www.example.com;
    if ($invalid_referer) {
        return 307 /;
    }
}

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.

4 Mi Piace

E questo è probabilmente abbastanza? Tocca a te, Simon, eccellente.

Anche meglio se aggiungi una regola per reindirizzare alla homepage?

3 Mi Piace

Saluti! Avevo già un paragrafo sul reindirizzamento, ma ho modificato il mio post precedente per renderlo più chiaro utilizzando un esempio completo.

1 Mi Piace

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.

1 Mi Piace

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”.

Prima di quell’exec, aggiungi le seguenti righe:

  - replace:
      filename: "/etc/nginx/conf.d/discourse.conf"
      from: "#valid_referers none blocked mysite.com *.mysite.com;"
      to: valid_referers none blocked mysite.com *.mysite.com;

  - replace:
      filename: "/etc/nginx/conf.d/discourse.conf"
      from: "#if ($invalid_referer) { return 403; }"
      to: if ($invalid_referer) { return 307 /; }

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.

cd /var/discourse
./launcher rebuild app
4 Mi Piace