Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Pametnija zaštita hotlinkovanih slika



>Translated with the permission of A List Apart Magazine and the author[s].

Thomas Scott

Hej! To je moje!



Većina internet stručnjaka je svesna problema koje mogu da izazovu hotlinkeri. Pijavice. Kradljivci propusnog opsega. Ljudi koji koriste slike koje Vi hostujete preko Vašeg web servera na svojim web stranicama.

Nekim srećnicima koji ne plaćaju količinu podataka koju prebace po gigabajtu ovo i ne deluje strašno. Koga briga što neki weblog malog prometa koristi Vašu sliku snega kako pada u Njujorku?

Za druge sajtove, međutim, ovo je znatno veći problem. Ako je .jpeg fajl od 100k hotlinkovan na sajtu koji ima, na primer, 1000 pregleda po danu, to je 100MB prebačenih podataka sa Vašeg sajta, a da ga niko nije ni posetio tog dana. Ako imate na raspolaganju samo nekoliko gigabajta mesečno - ili još gore, ako plaćate po gigabajtu - ovo može biti problem. A ako neko namerava da hotlinkuje celu galeriju sa Vašeg sajta...

Nevolja je u tome što uobičajen pristup prevenciji hotlinkovanja ima nekoliko neželjenih posledica.

Brze popravke nisu savršene

Uobičajen pristup je da se serveru da instrukcija da odbija sve zahteve za slikama gde HTTP zaglavlje za reference 1 nije sa vašeg sajta (ili prazno). Tako će samo ljudi koji zapravo pretražuju Vaš sajt - ili oni čiji internet pretraživači iz bilo kog razloga ne prolaze zaglavlja reference - moći da vide sliku.

Drugi pristup je preusmeravanje saobraćaja koji se odvija van sajta na alternativnu sliku - ili na univerzalnu “hotlink je zabranjen” sliku ili (u slučaju nekih pakosnijih webmastera) na nešto šokantnije.

Problem sa ovim tehnikama je što je i uobičajeno linkovanje zabranjeno. Budući da pretraživači takođe šalju zaglavlje reference kada neko klikne na link jedne od Vaših slika, jedini način da se direktno ode na sliku bi bio da se kopira link i zalepi na novi tab pretraživača.

Nekim webmasterima se ovo može svideti - ovo omogućava da se ljudi povežu sa stranama na kojima se nalaze slike - ali drugi će poželeti da linkovi rade. Pritom, ako imate stranicu sa galerijom prepunom slika, ova metoda otežava ljudima da direktno ukažu na određeni deo Vašeg fantastičnog slikarstva.

Rešenje koje ću Vam upravo izložiti rešava ovaj problem i ujedno omogućava ljudima da Vam odaju priznanje kada linkuju vaše slike.

Gde idemo?

Sa PHP i mod_rewrite možete da onesposobite ugrađivanje i dozvolite linkovanje dok automatski stvarate stranice sa galerijama za direktne linkere. To je najbolje rešenje a evo i kako da to uradite:

Trebaće Vam Apache server sposoban da pokrene PHP sa dozvoljenim mod_rewrite. Ako ne znate šta imate, pitajte Vašu hosting kompaniju ili probajte - ako ne uspe, znaćete da ih nemate. ,br>
Prvo, napravite novi fajl i nazovite ga showpic.php i stavite ovaj kod u njega:

<?php
  header("Content-type: text/html");
  header("Expires: Mon, 26 Jul 1997 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("No picture specified.");
  }
?>
<!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"
>
</head>
<body>
<p>
  <img src="/<?php echo($pic); ?>" alt="Image">
</p>
<p>
  Image from
  <a href="http://www.yourwebsite.com/">
  your web site</a>.
</p>
</body>
</html>


Nepotrebno je reći da možete da promenite HTML da se slaže sa Vašim sajtom.

Hajde da pogledamo PHP. Prva linija je zaglavlje da biste se uverili da sadržaj poslat pretraživaču identifikuje dokument kao HTML. Videćemo zašto je ovo važno kasnije. Druga linija proverava da je varijabla $pic je prosleđena u skript. Ako nije, preskočiće do kraja i izaći će naglo. Ipak, pošto ovaj skript nikad ne bi trebalo da bude nazvan bez varijable (ponovo, videćemo kasnije zašto), to nije neki veliki problem.

Pretpostavivši da je varijabla tu, ostale linije PHP skidaju svaku oznaku sa nje (da bi se sprečilo iskorišćavanje scripta među sajtovima ), otpremite varijablu na pravo mesto da biste kreirali validnu <img> oznaku i da biste dodali ime za stranicu <title>.

Ovo do sad je samo jednostavan skript. Idite na

www.yoursite.com/showpic.php?pic=yourimage.gif i on će vam stvoriti jednostavnu stranicu pokazujući yourname.gif i zasluge.

Sada postaje zanimljivije

Ako ste .htaccess novajlija, pogledajte ovaj uvod(this introduction) koji će vas provesti kroz osnove.

Naredni korak je dodavanje sledećeg koda Vašem .htaccess fajlu.

RewriteEngine On

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

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


Hajde da pogledamo ovu liniju pažljivo. RewriteEngine On omogućava mod_rewrite da obavlja svoj posao. Ali evo prvo nekih uslova:

RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$ [NC]


OK. Prvi uslov: fajl se mora završavati kao .jpg, .gif ili .png. Ovo omogućava samo zaštitu hotlinkova za slike. Takođe ovo možete promeniti da uključuje i .swf, .mp3 ili druge slične fajlove.

RewriteCond %{HTTP_REFERER} !^$


Drugi uslov: Referenca ne sme biti prazna. Ovo znači da će ljudi koji, iz bilo kog razloga, ne prolaze zaglavlja reference, biti u mogućnosti da vide Vaše slike.

RewriteCond %{HTTP_REFERER} !yoursite\.com [NC]
RewriteCond %{HTTP_REFERER} !friendlysite\.com [NC]


Ovi uslovi dozvoljavaju linkovanje sa Vašeg sajta i sa drugih prijateljskih sajtova sa kojih želite da omogućite linkovanje. Naravno, promenite ove sajtove u Vaše. Apache nije vidovit

(Ne znate šta je ! \ .*$? To je ustaljen izraz. Ako se format ne menja, nemate o čemu da brinete)

RewriteCond %{HTTP_REFERER} !google\. [NC] 
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]


OK. Konačno, hajde da dopustimo Google-u da prođe. Ovi poslednji uslovi dozvoljavaju ljudima koji koriste Google cache i Google Image Search da vide Vaše slike. (Možda ćete želeti da sklonite ovo ako ne želite da ljudi nađu Vaše slike na ovaj način, ali Vam ja to ne preporučujem)

Sve zajedno

Hajde da sada spojimo ove dve stvari. Na poslednjoj liniji .htaccess fajla koja je:

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


Ovo poslednje pravilo preusmerava zahtev na /showpic.php?pic=[the requested file]. Zahvaljujući čudu od Apache-a ovo će automatski uključiti sve neophodne proreze i informacije o putanji i neće biti vidljivo krajnjem korisniku.

Dakle šta se dešava?

Jedini način da zahtev dođe ovako daleko je da:

* nije zahtev za image fajlom, i

* da ne dolazi sa domena koji posedujete ili sa kojim ste prijatelj

Prvo i najvažnije, ako neko pokuša da hotlinkuje jednu od Vaših slika, to mu neće uspeti - pretraživać će, umesto da primi image fajl, primiti rezultat showpic.php-a, koji je poslat kao text/html. Shvatiće da ne može da ga prikaže i prikazaće pokvarenu sliku na tom mestu. Propusni opseg je sačuvan.

S druge strane, ako neko pokuša da direktno linkuje vaše slike, biće neprimećeno preusmeren na HTML stranu sa Vašim zaslugama na njoj!. Bez crvenih X znakova, bez blesavih “pristup zabranjen” slika - samo korisna stranica koja će im pokazati sliku koju žele da vide, a pritom Vam daje zasluge za obavljeni posao.

Pogledajte to u praksi

Kao prvo, hajte da pogledamo da li script i dalje dozvoljava da se slike učitaju ljudima koji posećuju Vaš sajt. Da, ovo dobro izgleda . (Yes, that looks fine). Hajde da sad pogledamo da li A List Apart može da hotlinkuje moje slike. Ne, izleda da ne može (Nope, guess not). A šta će se desiti ako samo linkujete pravo na image fajl? Pa, evo je lepo formatirana strana( nicely formatted page.)

Da odemo korak dalje

Ako koristite neku vrstu sistema za sređivanje sadržaja kao što je Gallery , može postojati način da vežete script kao što je ovaj u bazu podataka slika i da automatski generišete ALT oznake i više informacija o slici.

Naravno, ovo ću ostaviti čitaocima kao vežbu.




Published (Last edited): 02-07-2012 , source: http://www.alistapart.com/articles/hotlinking