Paweł Rabinek blog

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.

28.05.2006 | trackback | Śledź komentarze w tym wątku: RSS 2.0.

Kategorie: SEO

Komentarze (16) do artykułu “Plik .htaccess w walce przeciw z hotlinking”

  • 1. shadow_no - 28.05.2006, 23:05:40

    Podziekował. :>

  • 2. reod - 28.07.2006, 10:07:36

    zadelicjowane (:

  • 3. eRiZ - 31.12.2006, 18:12:42

    Dobra, ktoś wyłącza przekazywanie referera w przeglądarce i co? Pozbawiasz niektórych gości możliwości obejrzenia obrazka…

  • 4. Paweł Rabinek - 01.01.2007, 17:01:26

    Skąd taki pomysł? Osobiście nie sprawdzałem, ale nie wydaje mi się, żeby tak to zadziałało.

  • 5. Łukasz Więcek - 03.01.2007, 11:01:48

    @eRiZ – jesteś w błędzie. Po to właśnie jest ta 3 linijka – „jeżeli referer nie jest jest pusty”. A jak jest, to pliki załadują się normalnie. Sam korzystam z tego rozwiązania już od kilku miesięcy i problemów żadnych nie ma.

    Sam kiedyś w głowie stworzyłem coś, co na moje oko byłoby skuteczniejszym rozwiązaniem (bo przy tym, co kolega w notce zaproponował, to osoby z wyłączonym refererem mogą bez problemu ściągać pliki z hotlinków). Temat poruszałem na forum, ale nikt nie pomógł go dopracować: http://forum.webhelp.pl/viewtopic.php?t=136531

    Pozdrawiam serdecznie

  • 6. Paweł Rabinek - 03.01.2007, 11:01:18

    A próbowałeś po prostu zrobić tak:

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

    ?

    W tym wypadku powinno to zadziałać jako: „Jeśli referer jest inny niż moja domena, to nie pokazuj moich obrazków.” Jednym słowem, ograniczy to dostęp do obrazków tylko wywoływanych z poziomu Twojej domeny.

  • 7. Łukasz Więcek - 03.01.2007, 21:01:02

    @Pawle – właśnie nie do końca. Miałem tak na początku. Ale wtedy, jeżeli ktoś ma wyłączone przekazywanie referera, to nawet jak się odwołuje z mojej strony, jest traktowany jako intruz.

  • 8. Paweł Rabinek - 03.01.2007, 22:01:11

    Hmm… No to prawda. A ilu jest takich którzy ukrywają ref? Myślę, że nie warto.

  • 9. Mendax - 11.04.2007, 15:04:53

    Pawel,

    Norton Internet Security blokuje standardowo referer.
    Swego czasu na pewnej stronie wielojezycznej sprawdzalem cos z pomoca referera(nie blokada hotlink), i w przyblizeniu ok. 3%-4% uzyszkodnikow nie przechodzilo testu…

    moje rozwiazanie (zadziwiajaco podobne do rozwiazania Lukasza, ale dzialajace):
    http://www.fabrykaspamu.pl/poprawne-zabezpieczenie-przed-hotlinkowaniem/

  • 10. dodatki - 02.01.2008, 18:01:23

    dziekowac.

  • 11. ado - 04.01.2008, 18:01:56

    Dzięki, wreszcie mi nie będą podkradać obrazków!

  • 12. Paweł Ryznar - 15.11.2008, 15:11:17

    witam

    czy to naprawdę działa? bo u mnie niestety nie, co jest bardzo dziwne

  • 13. pieto - 05.02.2009, 14:02:21

    Jak dla mnie hotlinkowanie pomaga w pozycjonowaniu :)

  • 14. QkiZ - 22.07.2010, 08:07:45

    Nie działa :(

  • 15. gość - 10.08.2011, 23:08:54

    niestety, nie działa, co więcej – nikt nic w tym temacie nie wymyślił

  • 16. Katon - 09.12.2011, 15:12:02

    Pysznie to dziala:)
    Ale niestety zabija tez wyswietlanie obrazkow strony w tlumaczu google, logiczne;)
    Jak zapisac dwie domeny „uprawnione”???

Skomentuj: