webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> porady >> php + mysql

Zabezpieczenie przed hotlinkowaniem

autor: Mateusz Bogolubow, ostatnia modyfikacja: 2007-02-23

szukaj: hotlinkowanie hotlinkowanie zabezpieczenie przed hotlinkowaniem zabezpieczenie przed hotlinkowaniem hotlink hotlink PHP PHP

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

Osoby czytające tę publikację przeglądały również:

Chcesz zostać programistą?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org