Jesteś tutaj: webmade.org >> porady >> php + mysql
autor: Mateusz Bogolubow, ostatnia modyfikacja: 2007-02-23
Hotlinkowanie jak zapewne wiesz jest to umieszczanie linku do pliku znajdującego się na innym serwerze. Taka praktyka jest bardzo uciążliwa ponieważ zżera nam cenny transfer na naszym serwerze, za który słono płacimy.
Najlepszym zabezpieczeniem jest oczywiście wprowadzenie odpowiednich modyfikacji do pliku .htaccess. Jednak gdy nie mamy możliwości jego edycji pozostaje nam alternatywne rozwiązanie. Stworzymy skrypt PHP, który rozwiąże problem hotlinkowania lub chociaż go zmniejszy.
Stwórz plik hotlink.php i wprowadź do niego kod:
<?php function hotlink($serwer) { $dlugosc = strlen($serwer); $referer = substr($_SERVER['HTTP_REFERER'],0,$dlugosc); if ($serwer == $referer) return true; else return false; } if (hotlink("http://webmade.org/") === TRUE) { switch($_GET['id']) { case 1: $plik = "grafika.rar"; break; case 2: $plik = "folder/plik2.rar"; break; default: $plik = "error.php"; } header("Location: http://webmade.org/".$plik); } else header("Location: http://webmade.org/"); ?>
Jak zapewne zauważyłeś pierwsza część kodu to jedno-argumentowa funkcja hotlink(). Argumentem tej funkcji jest adres serwera dla którego ma być "podpięte" zabezpieczenie hotlink. Cała funkcja sprawdza czy strona z której zostało zainicjowane pobieranie jest naszym serwerem. W przypadku powodzenia warunku funkcja zwraca true.
W dalszej części naszego skryptu sprawdzamy warunek korzystając z naszej funkcji hostlink(). Gdy warunek jest prawdziwy przy pomocy składni switch porównujemy wartości i wykonujemy odpowiednie instrukcje. Następnie funkcją header() wysyłamy nagłówek, który w tym przypadku jest odnośnikiem do wybranego pliku. Jeśli natomiast poprzedni warunek był nieprawdziwy wracamy na stronę główną naszego serwisu.
Dla lepszego zrozumienia tej porady zaprezentuje prosty przykład:
Na naszym serwerze posiadamy plik index.html w tej samej lokalizacji co hotlink.php(wraz z naszym skryptem). W pliku index.html mamy link, który odnosi się do lokalizacjihotlink.php?id=1. Ponieważ plik znajduje się na naszym serwerze przechodzi test hotlinkowania. Natomiast z powodu, że id=1(zmienna id ma wartość 1) plik grafika.rar zostanie pobrany.
Na koniec chciałbym zwrócić uwagę na pewny szczegół, który jest bardzo istotny. Zmienna $_SERVER['HTTP_REFERER'] jest wysyłana do serwera przez przeglądarkę i nie musi być tak zawsze. Co gorsze nie zawsze musi być prawdziwa. Dlatego to rozwiązanie nie jest idealne, ale zawsze to coś...
Mateusz Bogolubow
szukaj: hotlinkowanie zabezpieczenie przed hotlinkowaniem hotlink PHP
Osoby czytające tę publikację przeglądały również:
© 2004-2008 copyright by webmade.org