Jak stworzyć blokadę hotlink?

Tips & Tricks Zostaw komentarz

Załóżmy, że wrzucisz na swój serwer jakieś śmieszne zdjęcie (niekoniecznie musi być śmieszne, może być to jakiś ciekawy diagram itp. ale w tym przykładzie załóżmy, że jest ono śmieszne, bo takie zdjęcia najchętniej się rozchodzą po internecie). Załóżmy, że zdjęcie zajmuje 100 KB. Ponieważ zdjęcie jest bardzo śmieszne, więc sporo osób wysyła link do Twojej strony WWW, gdzie znajduje się zdjęcie. Ale niektórzy mogą owe zdjęcie podlinkować u siebie na swojej stronie WWW zdjęcie z Twojego serwera (zamiast skopiować plik graficzny na swój serwer). W ten sposób takie osoby kradną Tobie transfer (potocznie nazywa się to hotlinkowanie).

Dlaczego to jest złe? Otóż zdjęcie zajmuje 100KB. Jeśli 1000 osób odwiedzi czyjąś stronę, która hotlinkuje Twoje zdjęcie, to zużyjesz 100MB transferu (!). A teraz sobie wyobraź, że zdjęcie linkuje jakiś bardzo popularny serwis. Albo jest na tyle śmieszne, że wiele osób na swoich stronach zacznie je hotlinkować. Albo załóżmy, że często zamieszczasz u siebie różne śmieszne zdjęcia, które ciągle inni hotlinkują. W szybkim tempie możesz mieć wyczerpany całkowicie limit transferu (!) Ale można tego uniknąć. Otóż można do pliku .htaccess dodać odpowiednie wpisy, które zabronią hotlinkowania zdjęcia.Poniżej prezentuję najprostszy przykład. Powoduje on, że zdjęcie nie będzie wyświetlane z innego serwera, niż domena.pl (czyli jak zdjęcie będzie osadzone na stronie domena.pl to zostanie wyświetlone, ale jak będzie osadzone na stronie damiandaszkiewicz.pl to nie zostanie załadowane). Aha i blokada działa również na podkatalogi, czyli nie można hotlinkować również zdjęć z www.domena.pl/katalog/ itp.

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domena\.pl/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F,NC]

Na czerwono zaznaczyłem miejsce, które należy zmienić (zamiast domena.pl należy wpisać nazwę swojej domeny, nie zapominając, że kropki w adresie w waruunku RewriteCond trzeba poprzedzać ukośnikiem). Owa reguła działa na wersję z www i bez www. Pliki jpg, jpeg, png, gif i bmp nie mogą być hotlinkowane.

Owa blokada jest dobra, ale można pójść krok dalej. Zamiast braku wyświetlenia zdjęcia można wyświetlić inny plik graficzny (np. taki z napisem proszę nie kraść transferu lub taki z napisem zapraszam na stronę www.domena.pl). Taka regułka w pliku .htaccess musi być nieco bardziej rozbudowana.

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

Na czerwono zaznaczyłem miejsce, które należy zmienić (zamiast domena.pl należy wpisać nazwę swojej domeny, nie zapominając, że kropki w adresie w warunku RewriteCond trzeba poprzedzać ukośnikiem).

Tutaj parę słów wyjaśnienia. W katalogu głównym musi znajdować się plik o nazwie hotlink.gif. Druga linijka zawiera informację, że reguła nie zostanie przetworzona, gdy hotlinkujemy plik o nazwie hotlink.gif (większość osób opisujących blokadę hotlink zapomina o tym malutkim szczególe w wyniku czego w przypadku kradzieży transferu nie zostanie załadowany plik hotlink.gif gdyż blokada hotlink bez tego warunku bywa na tyle skuteczna, że i ten plik również nie może być hotlinkowany 😉 Trzecia i czwarta linijka się nie zmieniła. Natomiast zmianie uległa ostatnia linijka: zamiast blokady wyświetlenia grafiki każemy serwerowi wyświetlić zawartość pliku hotlink.gif

Tagi: , , , , , , , ,

Zanim dodasz komentarz, zapoznaj się z kilkoma podstawowymi zasadami:

  1. Jeśli zamiast imienia (lub pseudonimu) wpiszesz jakiś mało logiczny ciąg znaków np. asdfg, to taki komentarz zostanie usunięty.
  2. Jeśli się za kogoś podszywasz, to taki komentarz zostanie usunęty
  3. Jeśli zamiast imienia (pseudonimu) wpiszesz jakieś słowo kluczowe (np. tani hosting), to taki komentarz zostanie usunięty
  4. Jeśli Twoim jedynym celem jest zareklamowanie się, to taki komentarz zostanie niezwłocznie usunięty
  5. Komentarze nie związane z tematem notki są kasowane.
  6. Komentarze, które zawierają wulgarne słowa, bądź są obraźliwe (nie dotyczy konstruktywnej krytyki) są kasowane.
  7. Komentarze z mailem typu "nie.podam@coś.tam.pl" są kasowane
  8. Komentarze pisane niechlujnie (bez interpunkcji, w błędami ortograficznymi, z licznymi literówkami, pisane WIELKIMI LITERAMI) są kasowane

10 komentarzy do “Jak stworzyć blokadę hotlink?”

  1. greg302006 Says:

    Wszystko pięknie, tylko ta blokada na Firefoxie nie działa:(

  2. Damian Daszkiewicz Says:

    Działa, tylko pewnie masz w ustawieniach firefoxa wyłączone przekazywanie nagłówka referrer.

  3. greg302006 Says:

    Czy to oznacza, że jak sobie włączę to ustawienie w moim Firefoxie to inni użytkownicy na swoich komputerach nie będą mogli hotlinkować na Firefoxie? Czy też mam ich poprosić o włączenie tej funkcji?:))))

  4. M Says:

    Witaj, a czy mógłbyś pokierować mnie jak zmodyfikować troszkę ten zapis aby zezwolić na hotlinkowanie z dwóch domen a nie tylko z własnej? Na ten przykład mamy adres strony feeds.feedburner.com która wyświetlając mój kanał RSS hotlinkuje do miniaturek na moim serwerze, i chciałbym na to zezwolić. Druga sprawa jest taka że adres tej strony, tak jak i adres mojej strony, składa się z trzech członów. subdomena.domena.com. Rozumiem że należy zapisać taki adres w sposób następujący:?
    RewriteCond %{HTTP_REFERER} !^http://(. \.)?sub\.domena\.pl/ [NC]

  5. Damian Daszkiewicz Says:

    @M – co do subdomeny, to nic nie zmieniasz, zostawiasz w spokoju.
    W linijce:
    RewriteCond %{HTTP_REFERER} !^http://(. \.)?domena\.pl/ [NC]

    fragment wyrażenia regularnego przed domena\.pl oznacza:
    (. \.)? – dowolna liczba znaków zakończona kropką a ten pytajnik oznacza, że człon w warunku nie jest obowiązkowy, czyli reguła pasuje do domena.pl, http://www.domena.pl edek.domena.pl itp.

    A jeśli chodzi o dodanie dodatkowej domeny „z której można hotlinkować” to po prostu dopisujesz dodatkową linijkę analogiczną do tej z wpisem domena.pl np. oto mój przykładowy .htaccess w którym można hotlinkować z dwóch domen:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/hotlink\.gif$
    RewriteCond %{HTTP_REFERER} !^http://(. \.)?domena\.pl/ [NC]
    RewriteCond %{HTTP_REFERER} !^http://(. \.)?domena2\.pl/ [NC]
    RewriteCond %{HTTP_REFERER} !^$
    RewriteRule .*\.(jpe?g|gif|bmp|png)$ http://www.domena.pl/hotlink.gif [L]

  6. M Says:

    Dzięki za błyskawiczną odpowiedź 🙂

    Chodzi o to że na jednym serwerze domena.com jest wiele stron, i w tym moja, każda z własną subdomeną. Powyższa regułka zadziała tak że zezwoli na hotlink dla każdej z tych stron, czego nie chcę. Użyłem takiego zapisu:
    RewriteCond %{HTTP_REFERER} !^http://nazwa\.domena\.pl/ [NC]
    Tak że z innej subdomeny blokada zadziała, a przynajmniej powinna, na razie nie mam jak tego sprawdzić.

    A co do dwóch adresów, nie sądziłem że wystarczy dokleić kolejną linijkę, profilaktycznie tutaj też wpisałem pełny adres
    http://feeds\.feedburner\.com/moj-kanal
    I wydaje się działać świetnie, dzięki, pozdrawiam.

  7. Muaddib Says:

    No tak a co w przypadku gdy domena jest e-domena.pl czy ten minus również poprzedzamy ukośnikiem ??

  8. Damian Daszkiewicz Says:

    Jako że tutaj mamy do czynienia z wyrazeniami regularnymi, a znak minusa w wyrażeniach regularnych ma szczególne znaczenie, to trzeba dodać znak ucieczki \ przed minusem

  9. misiek21 Says:

    Czy umieszczenie grafiki („nie kradnij.gif”) na innym serwerze niż własny spowoduje też wykorzystanie transferu?

  10. Rachman Says:

    Warto może dać googlowi pokazywać nasze grafiki prawdziwe a nie hotlinka. Trochę głupio to może wyglądać 😉

    RewriteCond %{HTTP_REFERER} !google\. [NC]

Zostaw komentarz

WordPress - Hosting: Twój hosting - Skórka: N.Design Studio - Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj się