21 maggio 2008  11

Come difendersi dall'Hotlinking con BlogEngine.NET e WordPress

hackerCon il termine Hotlinking (o Inline linkingW) si indica una deprecabile pratica che consiste nell'inserire all'interno di una pagina web un collegamento ad una risorsa (molto spesso un immagine) contenuta su un host remoto differente dal proprio.

L'operazione, in se apparentemente innocua, in realtà crea tutta una serie di problemi al sito (o server) ospitante la risorsa oggetto del collegamento esterno, primo fra tutti l'occupazione di banda (Bandwith theft) che, in taluni casi, può anche arrivare a causare dei seri rallentamenti a discapito del primo.

Infatti, il più delle volte, la tecnica di Hotlinking viene utlizzata da siti con elevato traffico nel caso in cui debbano publicare delle risorse dimensionalmente elevate (ad esempio foto in alta risoluzione) prese da fonti esterne anche a libera distribuzione. In tal modo si scarica sull'host remoto il carico di banda necessario per la visualizzazione delle stesse.

Come capire se il proprio sito è oggetto di Hotlinking

La strategia migliore è, come sempre, quella di osservare la sezione referrer degli accessi al proprio sito: se si nota un incremento inconsueto delle visite o degli hits, accompagnato da un rallentamento nel caricamento delle pagine, è opportuno fare un'indagine più approfondita. Generalmente le risorse caricate tramite collegamenti esterni lasciano tracce in quasi tutti i sistemi di web analytics, consentendo una rapida individuazione del referente incriminato.

Questo blog, ad esempio, è stato recentemente oggetto di Hotlinking su un immagine in esso contenuta da parte di un sito spagnolo che è riuscito a collezionare più di 1000 hits della stessa in 3 giorni. L'analisi dei referrer, mi ha consentito, anche se un pò in ritardo di individuare l'origine del traffico anomalo: purtroppo non sempre è possibile, ma sarebbe buona norma controllare le statistiche di accesso almeno una volta al giorno, per evitare problematiche di questo tipo. A titolo di cronaca, i sistemi di tracciamento basati su javascriptW, come ad esempio Google Analytics o LLOOGG, non consentono di individuare questa specifica anomalia: sono necessari strumenti in grado di analizzare i file di log del webserver su cui ci si appoggia per la pubblicazione del sito.

Quali contromisure applicare

La pratica del'hotlinking è diffusa da più di un decennio: molti hosting sono già dotati di sistemi di prevenzione del furto di banda ed impediscono a priori ad indirizzi esterni di collegarsi a risorse ospitate su di essi.

Alcuni, molto simpaticamente, una volta che si accorgono di essere oggetto del "furto", semplicemente si limitano a rimuovere o sostituire l'immagine "rubata" con un altra contenente appunto dei riferimenti espliciti al reato commesso. In talune occasioni (emblematico il recente caso relativo al blog di un noto politico nostrano) il proprietario dell'immagine linkata la sostituisce, per ritorsione, con un fakeW, con conseguenze facilmente immaginabili.

Dato che è meglio prevenire che curare, sarebbe auspicabile dotare il proprio sito di un meccanismo di protezione che impedisca i collegamenti esterni alle proprie risorse.

La soluzione per BlogEngine.NET

BlogEngine.NET gestisce la pubblicazione delle immagini tramite un httphandler. Questo ha semplificato in maniera incredibile la realizzazione di un'estensione che mi permettesse di proteggere la pubblicazione delle immagini da fonti esterne.

Dopo avere scritto le pochissime righe di codice necessarie alla realizzazione del plug-in, ho scoperto che Mads Kristensen aveva già realizzato un oggetto identico (sono solo 6 righe di codice c#) funzionante, però, solo con la release 1.2 di BlogEngine.NET. La mia versione, al contrario, sfrutta i nuovi eventi disponibili nella release 1.3 ed è quindi compatibile con quest'ultima (e anche la prossima a venire).

Poichè il codice è molto simile (una funzione è sostanzialmente uguale), ho deciso di inserire nei credits del mio plugin anche Mads, soprattutto perchè cronologicamente lui ha realizzato l'oggetto molto prima di me e, in ogni caso, non vorrei essere accusato di plagio.

In sintesi l'estensione non consente l'accesso alle immagini da parte di altri host al di fuori del proprio sito, restituendo un HTTP Error 403 (file not found) alle richieste esterne. Il tutto è stato realizzato abbastanza rapidamente (per tamponare l'emergenza occorsami) e sarà, in futuro oggetto di ulteriori modifiche (come ad esempio prevedere un'immagine sostitutiva contenente un messaggio di avviso, in alternativa alla generazione dell'errore).

Per il momento, è possibile scaricarne la prima versione, la cui installazione è semplicissima.

Una volta scaricato e decompresso il file:

HotlinkingImgBlock.zip (0,93 kb) 

è sufficiente copiare HotlinkingImgBlock.cs nella cartella /App_Code/Extensions/ per attivare la protezione.

La soluzione per WordPress

Spulciando la rete ho trovato plugin per WordPress che dovrebbe far sostituire le immagini sottoposte ad hotlinking con un'immagine recante un messaggio di warning (o di divieto) scelta a piacere dall'utente. L'autore assicura la compatibilità con Wordpress fino alla versione 2.1.3: non ho approfondito ulteriormente sugli eventuali sviluppi del plugin in questione e nè ho verificato l'esistenza di altri prodotti analoghi.

Personalmente, trovo la soluzione della sostituzione dell'immagine poco opportuna, soprattutto perchè, anche se in minima parte, richiede sempre un minimo di banda da impegnare per l'invio della stessa.

Meglio quindi applicare una soluzione come quella praticata per BlogEngine.NET, ovvero rispondere alla richiesta dell'immagine tramite un HTTP ERROR 403.

La cosa è fattibile con estrema semplicità inserendo poche regole all'interno del file di configurazione .htaccess del proprio blog. Naturalmente questa soluzione è applicabile solo nel caso in cui si utilizzi Apache come web server di appoggio.

Posto quindi nomedelsito.com l'indirizzo del proprio sito web, inserire all'interno di .htaccess, le seguenti righe:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?nomedelsito\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F,L]

Il caso esaminato non consente l'accesso ai file con le estensioni indicate, ma può essere esteso anche ad altre semplicemente modificando la quarta riga. Analogamente (nella stessa riga) è possibile indicare un immagine sostitutiva da restituire al posto di quella richiesta (ma io mi sento di sconsigliare questa strategia per quanto già detto prima).

Esprimi il tuo giudizio

Commenti (11) -

Notorious
Notorious
21 mag 2008 alle 18:54  01
Ottimi suggerimenti, come al solito! ;)
webfruits
webfruits
23 mag 2008 alle 11:02  02
A me è capitato diverse volte,  soprattutto con le immagini di anteprima di materiale grafico da scaricare pubblicate sul mio blog. Devo dire che tutte le volte che ho contattato personalmente il blogger responsabile" mi è andata bene e ha subito provveduto.
Utilissimi i tuoi suggerimenti, comunque. Ne farò tesoro per evitare l'inconveniente in futuro Smile
Cristiano
Cristiano
23 mag 2008 alle 16:15  03
@ webfruits:
I plagi sui contenuti del mio sito ormai sono quasi all'ordine del giorno: ma mentre di quelli non me ne curo ormai più, il "furto di banda" è un pochino più grave perchè se non bloccato, può letteralmente mettere in ginocchio il server che ti ospita.
Purtroppo ci si accorge di questi rischi solo dopo che se ne è vittime :-(
L'importante alla fine però, è riuscire a risolvere il problema e mettere in guardia, se possibile, anche gli altri Wink
Traffyk
Traffyk
26 mag 2008 alle 04:00  04
Io sono favorevole perchè faccio linkare spesso le immagini in wordpress alla home del blog oppure alla pagina stessa e al 99% dei casi quando copiano un immagine mi copiano pure il link che porta non solo un po di traffico, ma anche un po di pubblicità al blog Tong

Su Ib sto sfruttando flickr invece, ma solo perchè netsons ha spazio limitato altrimenti avrei ripetuto lo stratagemma (ma lo farò comunque appena escogito qualcosa :p )
notoriousxl
notoriousxl
26 mag 2008 alle 13:16  05
@Traffyk: beh, Flickr può comunque rivelarsi una buona fonte di traffico, se dai alle tue foto i giusti titoli e descrizioni. E mi sembra di aver visto che abbiano tolto nuovamente il nofollow dai link delle descrizioni... ;)
Ricordati inoltre di linkare ogni foto alla pagina originale di Flickr; non solo perché te lo "impongono" le linee guida, ma anche perché faresti scambio link tra due pagine a tema tra loro! ;)
Traffyk
Traffyk
26 mag 2008 alle 15:44  06
Ah ok, allora nei prossimi post le linko infatti sto gia iniziando a linkare i post nelle descrizioni delle foto..

(Cristiano avresti debellato il problema hostando su Flickr Smile ).
pillola
pillola
23 giu 2008 alle 13:28  07
ora forse mi prenderete a mazzate!
ma vorrei un consiglio in quanto poco avezza alla cosa.
Se vado su google alla ricerca di un immagine, con la ricerca mirata per immagini, e trovo la foto che mi interessa, ovviamente questa è associata ad un url, che sia blog o sito, se apro l'url corrispndente ovviamente la foto non la trovo più perché chissà in quale periodo era stata postata, quindi, supponendo che io non prelevi la foto ma la linki nel mio spazio, lasciando l'url di origine, sarei tra quelle che utilizzano questa deprecabile pratica? e come dovrei comportarmi nel caso mi interessasse quella foto e non altre e non trovandola all'interno del blog/sito? ovvio che potrei citare la fonte, non è mia intenzione rubare foto, ma questo post mi ha confuso un poco le idee al riguardo...

Cristiano
Cristiano
23 giu 2008 alle 16:55  08
pillola ha scritto:
...ma la linki nel mio spazio, lasciando l'url di origine, sarei tra quelle che utilizzano questa deprecabile pratica?
Esattamente.

... e come dovrei comportarmi nel caso mi interessasse quella foto e non altre e non trovandola all'interno del blog/sito?
Generalmente l'immagine, se indicizzata da Google c'è sempre, ma a volte non corrisponde all'indirizzo nella cache del motore di ricerca (perchè potrebbe essere stata spostata ad esempio)
Ad ogni modo se vuoi usare foto presenti su internet puoi farlo scaricandole e pubblicandole a tua volta sul tuo sito a patto che:
1) non siano protette da copyright che ne vieti la pubblicazione su altri siti anche citandone la fonte (e in tal caso è esplicitamente indicato)
2) sono protette da copyright ma è possibile pubblicarle citando autore, fonte ed eventuale link di provenienza

Puoi effettuare hotlinking solo da servizi di pubblicazione e condivisione di foto on line (come ad esempio Flickr) ma sempre attendendoti alle policy espressamente indicate all'uopo.
pillola
pillola
23 giu 2008 alle 20:35  09
@ Cristiano:

scusami se sono pedante, avvisami nel caso, ma davvero sono digiuna di un sacco di cose. personalmente non mi costa niente scaricarle in locale e ricaricarle nel mio sito, anche se provengono da flickr, ma proprio riguardo quest'ultimo, oltre che "tutti diritti riservati" non trovo altre informazioni di policy. Significa che neppure inserendo il link alla foto si possono pubblicare? Se così fosse mi pare di capire che non è per niente facile trovare foto da utilizzare sui siti. Dove potrei cercare informazioni dettagliate riguardo il copyright e il loro significato dettagliato nel caso, sapresti indirizzarmi in qualche luogo?
Cristiano
Cristiano
23 giu 2008 alle 22:19  10
@ pillola:
Queste sono le linee guida di Flickr:
http://www.flickr.com/guidelines.gne

E queste invece le FAQ:
http://www.flickr.com/help/faq/

Wink
pillola
pillola
24 giu 2008 alle 22:23  11
@ Cristiano:

Grazie
cercherò di fare del mio meglio sperando di non far danni. (smile imbarazzato)

Aggiungi Commento

biucitecode
  • Commento
  • Anteprima
Loading


| |   |  

Codice QR

Codice QR - cristianofino.net

Ultimi Commenti