Come vietare l’Hotlinking?

 

L’ hotlinking é uno dei problemi maggiori per un sito o un blog che abbia come tema la fotografia. Molto spesso acade infatti di trovare indicizzate su Google le proprie immagini le quali peró sono presenti su altri weblog o siti che si voglia. Non solo il webmaster di quel sito ha inserito le nostre foto nel suo spazio web ma sfrutta anche la nostra banda perché le immagini le richiede direttamente dal nostro server.

(<img src=”http://www.ilvostrosito.it/immagini/lavostrafoto.gif>)

Il danno che puó arrecare la pratica dell’Hotlinking potrebbe essere anche finanziario in quanto sfruttando le risorse del vostro spazio web in maniera esagerata vi costringerebbe a comprare o a aumentare la banda a disposizione sul vostro server.

 

Hotlinking: come vietarlo?

Se si ha la fortuna di avere il proprio sito o Blog su di un server Apache con il sistema operativo Linux, possiamo vietare nel file .htaccess presente nella root del server, che venga utilizzata la nostra banda per l’uso delle immagini.

 

.htaccess regole contro l’Hotlinking

La regola contro l’hotlinking altro non é che un divieto ad usare il nostro indirizzo URL per far apparire le immagini su di un altro sito.

L’esempio fatto piú sopra della stringa di richiamo del’immagine, dice che la foto risiede sul nostro server nella cartella immagini. Proprio questo percorso non sará piú utilizzabile se la stringa si trova su di un altro server e di conseguenza quindi su di un altro sito web.

 

Vediamo come vietare o evitare l’Hotlinking

Ci sono diverse regole che possono essere utilizzate allo scopo, ho scelto la piú semplice secondo me per semplificare il tutto.

Nel file .htaccess se esistente inseriremo la seguente regola:

 

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://([-a-z0-9]+\.)?miodominio\.it [NC]
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC,L] 

RewriteEngine on (se esiste giá nel file non devi ripeterlo)

L’ultimo parametro tra le parentesi quadre non sta a significare manda a F,N,C,L, chi mi frega le immagini :)  ma piú semplicemente:

 

[NC] = Non Case sensitive
F = Restituisci errore 403 (Forbidden)
L Last rule, cioè non leggere oltre perché questa è l’ultima regola.

 

Vietare Hotlinking: Effetti collaterali

L’effetto collaterale piú pericoloso é quello che non solo i siti nel web non potranno scaricare con il vostro indirizzo le immagini, ma non potranno farlo neanche i motori di ricerca!

CATASTROFE direte voi giustamente!

Niente paura, il rimedio a questo effetto indesiderato del divieto dell’Hotlinking c’é. Dobbiamo solo indicare al server che se sono i motori di ricerca a richiedere di scaricare le nostre immagini usando il nostro indirizzo URL deve permetterglielo.

 

Regola per ammettere l’Hotlinking dai motori di ricerca:

 

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://([-a-z0-9]+\.)?vostrodominio\.it [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_REFERER} !images.google\. [NC]
RewriteCond %{HTTP_REFERER} !msn\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{HTTP_REFERER} !ask\. [NC]
RewriteRule \.(jpe?g|gif|bmp|png)$ – [F,NC,L]

 

Come si vede dalla regola qui sorpa i motori Google, Yahoo, Msn, e Ask sono stati abilitati a scaricare le nostre immagini senza nesun divieto.

 

La regola Rewrite Cond in questo particolare caso, sta a significare “condizione per l’ammissione dell’Hotlinking” Troviamo poi il punto esclamativo ! che sta a significare: “se non é” il mio sito, se non é Google o ask, eccetera, RewriteRule, riscrivi la condizione di divieto per i file jpg,gif,bmp,png.

 

Alla prossima…. ;)

 

Angelo Palma

5 Responses to “Come vietare l’Hotlinking?”

  1. ho letto questo articolo ed avrei una cosa da chiederti.

    dove dici: L = Last rule, cioè non leggere oltre perché questa è l’ultima regola.

    la lettera L va introdotta nell’ultima regola/riga del file .htaccess?

    ti spiego perche’ te lo chiedo. nel mio file .htaccess ho tra l’altro le seguenti righe:

    ————
    RewriteEngine On

    RewriteCond %{HTTP_HOST} ^(www\.)?miodominioalternativo\.org
    RewriteRule (.*) http://www.miodominio.net/$1 [R=301,L]

    RewriteCond %{HTTP_HOST} !^www\.miodominio\.net$
    RewriteRule ^(.*)$ http://www.miodominio.net/$1 [L,R=301]

    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http://(www\.)?miodominio.net/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://(www\.)?miodominio.net*$ [NC]
    RewriteRule .*\.(gif|jpg|GIF|JPG)$ http://www.miodominio.net/images/visit.gif [R,NC]

    redirect 301 /oldpage.htm http://www.miodominio.net/newpage.htm
    ————

    la prima condizione redirige un nome dominio alternativo verso il nome dominio che voglio pubblico

    la seconda condizione introduce www anche se non si digita. e qui puoi vedere la “L”

    la terza condizione non fa linkare le immagini e dovrebbe (perche’ non funziona) far vedere un’immagine alternativa.

    e poi iniziano le righe redirect 301

    dovrei introdurre la lettera “L” alla fine della terza condizione togliendola dalla seconda, e magari anche spostare il redirect 301 prima delle condizioni di rewrite?

  2. Ciao Guido,

    la L di Last Rule chiude i Rewrite Rule alla fine di essi. Il redirect 301 non é un RewriteRule. Puoi lasciarlo dove sta o metterlo dove ti pare.

    In realtá il server nel tuo caso, comprende la L come la fine della condizione di ogni rewrite rule, e quindi anche in questo caso non é un errore. Infatti per quella condizione non ci sono altri rewrite da fare.

    Con un piccolo trucco Puoi far apparire la tua foto con il link al tuo sito sotto di essa, solo se l’indirizzo dell’immagine viene inserito dirtettamente nel browser.
    Per far questo dovresti creare un piccolo file che venga richiamato in quei casi.

    Il file che chiameremo nocopy.php lo inseriremo nella root come un semplice file php.

    <?php
    header(“Content-type: text/html”);
    header(“Expires: Tue, 26 Jul 2030 05:00:00 GMT”);
    header(“Cache-Control: no-store, no-cache, must-revalidate”);
    header(“Cache-Control: post-check=0, pre-check=0″,
    false);
    header(“Pragma: no-cache”);
    $pic = strip_tags( $_GET['pic'] );
    if ( ! $pic ) {
    die(“Non ci sono immagini!”);
    }
    ?>
    < !DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”
    “http://www.w3.org/TR/html4/strict.dtd”>
    <html>
    <head>
    <title>< ?php echo($pic); ?></title>
    <meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″> </meta>
    </head>
    <body>
    <p>
    <img src=”images/<?php echo($pic); ?/>” alt=”Image”>
    </p>
    <p>
    Immagine del sito
    <a href=”http://www.tuodominio.it/” rel=”nofollow”> iltuodominio.it </a>.
    </p>
    </body>
    </html<

    ————————————————–

    Nel file .htaccess inseriremo poi i seguenti comandi:

    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$ [NC]
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !tuodominio\.it [NC]
    RewriteCond %{HTTP_REFERER} !google\. [NC]
    RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]

    RewriteRule (.*) /nocopy.php?pic=$1

    ——————————————————–

    Se qualcuno quindi tenterá di fare un Hotlink, l’apertura dell’immagine nel browser dell’utente fallirá.
    Chi invece richiamerá direttamente l’immagine nel suo browser troverá il link alla tua pagina.

    Una serie di possibilitá su come proteggersi dagli Hotlink compreso il codice appena descritto puoi trovarla qui: http://www.alistapart.com/articles/hotlinking/

    Se seguirai alla lettera le operazioni, il codice descritto dovrebbe funzionare.

    Qui potrai testare se la tua protezione contro gli Hotlink funziona:
    http://altlab.com/hotlinkchecker.php

    Ciao

    Angelo Palma

  3. Scusa, dimenticavo di aggiungere che se vuoi far apparire un’altra foto al posto di quella Hotlinkata (in questo caso peró non risparmi banda) devi modificare l’ultima riga del codice inserendo questa al suo posto.

    RewriteRule \.(jpe?g|gif|bmp|png)$ images/nohotlink.gif [L]

    Dove “nohotlink.gif” é l’immagine che vuoi far apparire al posto dell’altra.

  4. Perfetto Angelo, grazie.
    ho utilizzato il secondo metodo, quello che fa vedere una immagine alternativa. Prossimamente provero’ anche il metodo della pagina php.

    ti dicevo che a me l’immagine alternativa non funzionava. ora funziona.

    invece della riga:
    RewriteRule .*\.(gif|jpg|GIF|JPG)$ images/nohotlink.gif [R,NC,L]

    ho messo la riga
    RewriteRule \.(jpe?g|gif|bmp|png)$ images/nohotlink.gif [L]

    ho sostituito in pratica [R,NC,L] con [L] ed ora funziona

    dimenticavo: un altro argomento interessante sono le eccezioni, in quanto da determinati siti, e non solo motori di ricerca, si potrebbe volere un hotlink

    io in questo caso ho messo le righe:

    RewriteCond %{HTTP_REFERER} !^http://(www\.)?sitoesterno.it/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://(www\.)?sitoesterno.it*$ [NC]

    cosa ne dici?

    un’ultima domanda:

    ho notato che gli indirizzi url li hai scritti cosi:
    http://(-a-z0-9+\.)?miodominio\.it [NC]

    io invece li scrivo cosi:
    http://(www\.)?miodominio.net/.* [NC]
    http://(www\.)?miodominio.net*$ [NC]

    praticamente nelle mie righe metto tra parentesi www e te le variabili di numeri e lettere (in altri esempi ho visto anche le lettere maiuscole) e non metto gli slash o li metto al posto sbagliato. ed inoltre ho la variante del dominio 2 volte, una con il segno del $. e’ indifferente?

    il file .htaccess lo modifico quando trovo qualcosa di interessante anche per i miei siti, pero’ copio ed incollo il codice e lo modifico, senza sapere cosa vogliano dire le variabili, la tua spiegazione + sopra della “L” mi e’ stata utile

  5. ho notato che gli indirizzi url li hai scritti cosi:
    http://(-a-z0-9+\.)?miodominio\.it [NC]

    io invece li scrivo cosi:
    http://(www\.)?miodominio.net/.* [NC]
    http://(www\.)?miodominio.net*$ [NC]

    ————————————————————–

    Ci sono diversi modi di far interpretare il comando al server. In base alla regola potremo quindi usare un semplice www, oppure delle espresioni regolari che facciano comprendere sia le lettere dalla A alla Z che i numeri dallo 0 al 9.

    Per quanto riguarda il tuo caso é molto piú semplice non usare nulla. Vedi il seguente esempio di ammissione per un Hotlink da un sito amico:

    RewriteCond %{HTTP_REFERER} !dominioesterno\.it [NC]
    RewriteCond %{HTTP_REFERER} !dominio2esterno\.it [NC]

    senza http ne www, come vedi.

    Dai un occhiata alla documentazione ufficiale del mod_rewrite qui:
    http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

    Buona domenica.

    Angelo Palma

Leave a Reply

You must be logged in to post a comment.