Evitare che altri siti linkino le nostre immagini o i nostri files: come prevenire l’hot-linking con htaccess
Una pratica assolutamente scorretta nel web è quella di linkare direttamente dal proprio sito i files (programmi da scaricare, immagini ecc) risiedenti su un altro sito. Questo ovviamente oltre a “ingolfare” inutilmente il sito “derubato” (che riceverà traffico pur non essendo visitato), causa anche una perdita di visitatori nel caso si linkino programmi autoprodotti che si vuole pubblicizzare (è capitato ad esempio qui con Gargaroz, molti siti ovviamente mantenuti da sprovveduti linkavano il download diretto alle vecchie versioni, quando qui sul sito ufficiale era presente la versione nuova), questo ovviamente è altamente controproducente sia per gli sviluppatori, che cercano di mantenere certi standard qualitativi, sia per i navigatori stessi, che ignari perdono tempo su siti “pirata” quando rivolgersi a quello ufficiale sarebbe sicuramente più vantaggioso, soprattutto in termini di supporto.
Ebbene, come fare in modo da evitare tutto questo? Il webserver Apache ci mette a disposizione uno strumento molto semplice quanto estremamente potente: il file .htaccess, di cui abbiamo già discusso in un precedente articolo. Tramite opportune regole è possibile fare in modo che il link ai files venga negato se proviene da domini esterni a quello in cui il file risiede. In pratica il metodo per creare tale file è sempre lo stesso: col blocco note apriamo un file vuoto salvandolo come “a.htaccess” (metterci anche le virgolette, altrimenti viene aggiunta l’estensione txt), ci scriviamo dentro le regole, lo uploadiamo sul server nella directory principale e lo rinominiamo come .htaccess (ricordo che in windows non è possibile dare stringa nulla come nome di un file)
Un’implementazione abbastanza semplice può essere la seguente:
1 2 3 4 5 6 | <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https://www.settorezero.com/.*$ [NC] RewriteRule .*\.(zip|exe|doc|pdf)$ https://www.settorezero.com/docs/warning.txt [L] </IfModule> |
Spiegazione:
La riga 1 si assicura che il modulo mod_rewrite di Apache sia attivo, se si, allora vengono applicate le regole
La riga 2 avvia il rewrite engine, ovvero il motore di Apache che permette la riscrittura degli url
Le righe 3 e 4 verificano le condizioni per le quali deve valere la regola di riscrittura definita alla riga 5. In particolare:
La riga 3 controlla che il dominio di provenienza non sia vuoto (ad esempio se digitiamo l’indirizzo direttamente nella barra di navigazione del browser)
La riga 4 controlla che il dominio di provenienza non inizi per https://www.settorezero.com/ (ovviamente questa parte andrà modificata col vostro dominio) – il flag [NC] indica che il pattern di ricerca non deve essere case-sensitive
La riga 5 dice ad Apache di riscrivere tutti gli indirizzi appartenenti al pattern e che finiscono con le estensioni zip,exe,doc e pdf come https://www.settorezero.com/docs/warning.txt. In pratica se da un dominio esterno a settorezero.com viene linkato direttamente un file avente queste estensioni, il dominio esterno si ritroverà in uscita il file warning.txt (che nella fattispecie contiene un testo che invita a non praticare l’hot-linking e a rivolgersi al sito ufficiale).
L’ultima riga può essere sostituita con:
RewriteRule .*\.(zip|exe|doc|pdf)$ - [F] |
che causerà un errore 403 (accesso negato).
Questa pratica qui descritta, la maggioranza delle volte, viene utilizzata per evitare l’hot-linking delle immagini (desidero segnalare qui una gustosa notizia per farvi capire a volte quanto può essere dannoso fare una cosa del genere). Per fare questo possiamo ricorrere a qualcosina di molto più elaborato:
1 2 3 4 5 6 7 8 9 10 11 | <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https://www.settorezero.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !google\. [NC] RewriteCond %{HTTP_REFERER} !images.google\. [NC] RewriteCond %{HTTP_REFERER} !msn\. [NC] RewriteCond %{HTTP_REFERER} !yahoo\. [NC] RewriteCond %{HTTP_REFERER} !feedburner\. [NC] RewriteRule .*\.(gif|jpg|jpeg|png)$ https://www.settorezero.com/nohotlink.jpe [L] </IfModule> |
da questo settaggio possiamo renderci conto che: le immagini saranno visualizzate soltanto dal nostro sito e dagli altri consentiti (google, images.google ecc, è difatti bene non escludere questi, perchè gli utenti potrebbero trovare il nostro sito anche facendo una ricerca immagini), qualsiasi tentativo di inclusione di una nostra immagine, restituirà l’immagine https://www.settorezero.com/nohotlink.jpe (da notare: ho dato l’estensione JPE -che è consentita- altrimenti JPG o JPEG come impostato dalla regola, non sarebbero visualizzati)