Artykuł

wrz 14 2011
0

Jak zapobiegać hotlinkowaniu?

Kiedy ostatnimi czasy, przeglądałem statystyki i logi serwera, dostrzegłem pewne niepożądane zjawisko, które zwie się hotlinkowaniem. Hotlinkowanie, polega na wykorzystaniu zasobów znajdujących się na innym serwerze na swojej stronie. Często, np. w przypadku bibliotek JavaScript, możemy to robić w sposób pełni legalny. W taki sposób rozpowszechniany jest, np. popularny framework jQuery. Jednak hotlinkowanie ma również swoje złe wcielenie i niestety można się z nim spotkać bardzo często.

Często webmasterzy, bądź też zwykli użytkownicy pożyczają sobie np. nie swoje obrazy/screeny, mimo że treść licencji na stronie źródłowej, wymaga przyzwolenia autora dla takiego procederu, bądź też w ogóle tego zabrania. Właściciel strony, na której znajduje się zasób, okradany jest wtedy podwójnie. Po pierwsze, często kradziony jest jego obrazek, tekst, skrypt, czy też inny element - bez jego zgody, a po drugie zostaje również okradziony z własnego transferu, jaki przygotował dla swoich użytkowników. Na szczęście istnieje prosty sposób, który zapobiega hotlinkowaniu:)

.htaccess lekiem na całe zło

Lekiem na całe zło, może być plik .htaccess wykorzystywany w serwerach Apache. W moim przypadku, chodziło o hotlinkowanie screenów oraz częściowo grafik interfejsu. Problem pożyczania elementów interfejsu, rozwiązał się nie jako sam, przy okazji wprowadzenia CSS sprite'ów. Problemem wciąż jednak były screeny, których w tym momencie jest około 600, czyli całkiem sporo.

Aby rozwiązać problem, wystarczy wykorzystać mod_rewrite z Apache'a (o mod_rewrite, pisałem przy okazji wpisu na temat przyjaznych linków). Do poprawnej pracy, moduł musi być odkomentowany w pliku httpd.conf (plik konfiguracyjny serwera Apache). Za jego ładowanie, odpowiada linia:

LoadModule rewrite_module modules/mod_rewrite.so

Po aktywacji modułu, problem można rozwiązać za pomocą czterech linii umieszczonych w pliku .htaccess:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?altcontroldelete\.pl/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ gfx/hotlink.png [L]

Pierwsza linia, aktywuje RewriteEnginge, czyli mechanizm przepisywania. Istnieje duże prawdopodobieństwo, że jeśli nie jest to Wasze pierwsze spotkanie z tym plikiem, to RewriteEnginge włączyliście już wcześniej w innym celu, warto zatem dobrze prześledzić zawartość pliku .htaccess:)

Przejdźmy zatem do interpretacji kolejnych linii.

Linia 2:

Jeśli adres odsyłający jest różny od naszej domeny oraz wszelkich naszych subdomen (do określenia domeny, zastosowane zostały wyrażenia regularne; wyrażenie [NC] użyte na końcu linii oznacza not case sensitive - brak wrażliwości na duże/małe litery).

Linia 3:

Oraz jeżeli adres odsyłający, jest różny od wartości pustej.

Linia 4:

To zamiast wszystkich obrazów typu (zapis również za pomocą wyrażenia regularnego):

  • jpg
  • jpeg
  • gif
  • bmp
  • png

Wyświetl obrazek hotlink.png znajdujący się w lokalizacji gfx/hotlink.png na tym serwerze. [L] na końcu linii, oznacza zakończenie reguły.

Modyfikacje

Do powyższego kodu, możemy wprowadzić kilka modyfikacji. Np. zamiast obrazka, możemy wygenerować błąd 403. W ten sposób, nie będziemy tracić transferu naszego serwera na obsługę ruchu na innych witrynach. Zatem aby wyświetlić błąd 403, należy ostatnią linię zastąpić następującym kodem:

RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F]

Możemy również określić wprost domeny, które nie mogą korzystać z naszych zasobów. Aby to zrobić, należy pierwotny kod zapisać w następującej postaci:

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://(.+\.)?domena\.pl/ [NC]
RewriteRule .*\.(jpe?g|gif|bmp|png)$ gfx/hotlink.png [L]

Usunęliśmy trzecią linię oraz znak wykrzyknika w drugiej linii. Wykrzyknik w tym przypadku działa jak negacja. Nowy zapis, będzie zatem blokować nasze obrazki dla stron, które znajdują się w domenie domena.pl. Takie rozwiązanie jest przydatne, jeśli nie mamy nic przeciwko hotlinkowaniu, ale np. nie chcemy, by nasze obrazy/treści trafiały na jakieś konkretne strony/podstrony.

Data ostatniej modyfikacji: 06.06.2013, 08:53.

Podoba Ci się ten wpis? Powiedz o tym innym!

Send to Kindle

Komentarze

blog comments powered by Disqus