Plik .htaccess w walce przeciw z hotlinking

Hotlink to technika linkowania plików (np.: obrazków, dźwięków czy programów) z obcych serwisów i umieszczanie ich na swoich stronach www. Jest to nieetyczna technika, powodująca podkradanie cudzego transferu, a jak wszyscy wiedzą, to właśnie transfer jest najdroższy w usługach hostingowych. Co zrobić jeśli ktoś kradnie nasz transfer? Czy jest jakieś zabezpieczenie? Z pomocą przychodzi plik .htaccess.

Czym dokładnie jest hotlink (znane też pod nazwą inline linking, hotlinking, leeching lub „po polsku” hotlinkowanie)? Na podstawie Wikipedii:

Hotlink to technika budowania serwisu internetowego w oparciu o cudze zasoby. Mowa tutaj o zajmujących przepustowość i miejsce na serwerze plikach medialnych, plikach archiwalnych lub programach komputerowych. Technika ta należy do nieetycznych i jest zwalczana przez autorów adresów źródłowych. Jest techniką pasożytniczą wykorzystującą obce zasoby w celu popularyzacji własnej marki.
Zasada działania
Przykładowo, strona xxx.pl oferuje dział z programami do obróbki muzyki do ściągnięcia; Alternatywna strona yyy.pl chcąca posiadać podobny dział, umieszcza w swoim dziale linki do plików na serwerze strony xxx.pl. W tym wypadku internauta klikając na łącze na stronie firmy yyy.pl, w rzeczywistości ściąga plik ze strony firmy xxx.pl.

Częstym przypadkiem jest hotlinkowanie obrazków, dlatego też na przykładzie plików typu JPG, GIF i PNG zaprezentuje jak można ustrzec się przed hotlinkiem.

W pliku .htaccess wpisujemy:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?xradar\.net/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.png [L]

Zakładamy, że nasza strona ma adres www.xradar.net :-) Druga linia mówi jeśli referrer jest różny od www.xradar.net. [NC] oznacza not case sensitive – nie rozróżniaj wielkości znaków. Trzecia linia oznacza jeśli referrer nie jest pusty. Ostatnia linia mówi: przekieruj wszystkie pliki JPG, JPEG, GIF, BMP i PNG do pliku /image/nohotlink.png. W pliku nothotlink.png można umieścić jakiś znaczek, że ktoś podkrada nasz transfer :-) [L] oznacza, że to polecenie jest już ostatnie i informuje serwer żeby nie wykonywał kolejnych.

Oczywiście zamiast podmiany obrazka na specjalny dla hotlinkujących, można zwrócić komunikat 403 Forbidden (brak dostępu). Wystarczy wtedy zamienić ostatnią linijkę kodu powyżej na następującą:

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

O tym jak zrobić własną stronę błędu 403 Forbidden pisałem w tekscie Ban i 403 za pomocą htaccess.

Istnieje także możliwość zablokowania hotlinka dla konkretnej domeny. Przykładowo:

RewriteCond %{HTTP_REFERER} ^http://(.+\.)?strona1\.com/ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(.+\.)?strona2\.com/ [NC]

W tym przypadku zablokujemy przed hotlinikowaniem domeny strona1.com i strona2.com. [OR] oznacza lub.