Zabezpieczenie przed hotlinkowaniem
Hotlink to odnośnik z pewnej strony do zasobu strony znajdującej się na innym serwerze (najczęściej dotyczy to większych plików umieszczanych w downloadzie). W tym artykule nauczymy się w jaki sposób zabezpieczyć się przed nieuczciwymi webmasterami.
Co to jest hotlinkowanie?
Najprościej rzecz ujmując hotlink to odnośnik z pewnej strony do zasobu strony znajdującej się na innym serwerze (najczęściej dotyczy to większych plików umieszczanych w downloadzie). Niestety wielu webmasterów umieszcza tego typu linki na swoich stronach kosztem innych. To pasożytnicze zjawisko wśród prywatnych właścicieli kont www jest powszechnie tępione. Nikt przecież nie lubi, gdy jego strona w połowie miesiąca przestaje działać z powodu przekroczenia limitu trensferu danych. W tym artykule nauczysz się, jak zabezpieczyć swój skrypt downloadu przed hotlinkowaniem.
Zasada działania
Skrypt tutaj przedstawiony wykorzystuje prostą technikę, która polega na sprawdzaniu, skąd pochodzi odwołanie do pliku na Twojej stronie. W przypadku próby dostępu z innego serwera niż Twój ściąganie pliku nie rozpocznie się i zostanie wyświetlony stosowny komunikat.
Kod skryptu
Plik pliki.php
![]()
$pliki = array("pliki/plik.zip", "pliki/plik2.zip", "pliki/plik3.zip"); //itd...
//tworzymy tablice ze scieżkami do plikow, ktorych nikt oczywiscie nie pozna :)
![]()
Plik index.php
![]()
include "pliki.php";
// dołączamy plik z danymi plików umieszczonych do pobrania
![]()
$z=md5('http://'. $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]);
// ustwiamy wartosc zmiennej $z na hash md5 aktualnego adresu strony
![]()
echo '<a href="pobierz.php?nr=0&z='. $z .'">Pobierz plik!</a>';
/* wyświetlanie przykładowego linka do pliku - przekazujemy do pliku pobierz metoda GET zmienne zawierajace numer pliku (w tym przypadku pliku numer 0) i szyfr, na podstawie ktorego sprawdzimy poprawnosc odwolania */
![]()
Plik pobierz.php
![]()
include "pliki.php";
// dołączamy plik z danymi plików umieszczonych do pobrania
$nr = $_GET['nr'];
$plik = $pliki[$nr];
![]()
if(md5($_SERVER['HTTP_REFERER'])==$_GET["z"])
{
header("Location:$plik");
}
else
{
echo 'Blad! Blokada hotlinkowania!';
}
// sprawdzamy, czy adres, z ktorego ktos probuje dostac sie do pliku jest zgodny ze zmienna $z, jesli tak, przekierowujemy go do pliku, a jesli nie, wyswietlamy blad
![]()
Podany wyżej skrypt łatwo jest przystosować do dowolnego systemu downloadu, ale nie zawsze będzie to konieczne. Administratorzy kont często udostępniają użytkownikom narzędzia typu CPanel, gdzie można w wygodny sposób zarządzać blokadami hotlinkowania. Można to także zrobić ręcznie, ustawiając odpowiednie wpisy w pliku .htaccess.










