Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: hotlink i idntyfikacja url
Forum PHP.pl > Forum > PHP
mirobor
Mam taką zagwostkę.
Zewnętrzne serwisy wczytują konkretne pliki jpg z mojego hostingu.
Wczytywane są tylko pliki -nie mogę podrzucać im ani php, ani js, ani żadnych innych kodów.
Jakie są możliwości abym w czasie jako tako rzeczywistym przechwytywał url'e które zwracają się do mnie po pliki?

trueblue
http://stackoverflow.com/a/9959148
Tomplus
Parafrazując kod z StackOverFlow:

  1. $img = 'imageFolder/{$_GET['name']}.jpg';
  2. header('Content-Type: image/jpeg');
  3. readfile($img);


Ale nie można zapomnieć także o .htaccess

Kod
RewriteRule ^imageFolder\/([a-z0-9]{1,64})\.jpg$ /imageScript.php?name=$1


Ja korzystam z m/w takiego kodu do kontroli obrazów i przy okazji można przetwarzać np. dodając znak wodny.
mirobor
Pięknie to działa z .htaccess, ale jak tą metodą uzyskać url ? $_SERVER['HTTP_HOST'] zwraca mi przecież url pliku php.
Tomplus
Myślę że to powinno pomóc:
$_SERVER['QUERY_STRING']
mirobor
hmm, nie wiem, czy się dobrze rozumiemy.
.htaccess przekierowuje do pliku php, który na podstawie zmiennej w GET serwuje plik jpg. I wszystko pięknie. Ale jak pozyskać pełne url'e stron które zgłaszają się po ten plik?
Dodam, że nie znam urls serwisów, które wczytują plik z mojego hostingu.
O czym mam poczytać? Kopnijcie w dobrym kierunku.
viking
var_dump($_SERVER) i masz pełną tablicę danych jakie możesz uzyskać. Pamiętaj że nie wszystkie są zawsze dostępne (jak np referer), trzeba też je zabezpieczyć.
Tomplus
@Mirobor
Testowałeś moją pomoc?

Wszystkie globalne zapytania jakie chcesz zobaczyć to jak umieścisz w kodzie funkcję: phpinfo(32); przed headerem obrazka
Zamiast obrazka, powinieneś mieć tabelkę z globalami PHP. A jeżeli to za dużo, to wystarczy użyć to co podał Viking.


mirobor
Nie radzę sobie z tym. Opiszę dokładnie.
w .htaccess dodałem rewrite
  1. RewriteRule ^myfolder\/([a-z0-9]{1,64})\.jpg$ /home/pathotofile/imageScript.php?name=$1


plik imageScript.php

  1. $img = 'myfolder/'.$_GET['name'].'.jpg';
  2. $url = '?';
  3. $file = fopen("testfile.txt", "w");
  4. fwrite($file,$url);
  5. fclose($file);
  6. header('Content-Type: image/jpeg');
  7. readfile($img);


plik php serwuje grafikę i na tym przykładzie powinien zapisać plik tekstowy z url'em który zgłosił się po grafikę.
Czytam, ale nie znalazłem w jaki sposób wykorzystać w tym var_dump($_SERVER).
trueblue
Analogicznie do $_GET.
Tomplus
@Mirobor
Jak napisałem... Zrób sobie test.... Zrób:

RewriteRule ^myfolder\/([a-z0-9]{1,64})\.abc$ /home/pathotofile/testowySkrypt.php?name=$1

A następnie w testowySkrypt.php dodaj tylko i wyłącznie phpinfo(32);

Podlinkuj sobie na innej stronie ten myfolder/costam.abc i zobacz w którym wierszu wskaże ci się strona z której wszedłeś. Proste. Dokładnie to samo będzie z obrazkiem.
mirobor

Zrobiłem. W żadnym wierszu nie wskazuje mi URLa zewnętrznego serwera. Widzę, to co przesyłem w GET i lokalizację mojego imgeScript.php na moim serwerze. Żadnego urla z zewnątrz.
Dzięki, że Wam się chce pomimo, że mój biorytm intelektualny leży i kwiczy.
Tomplus
Więc skończmy temat, raz a porządnie:

Ja testowałem ów kod u siebie i otrzymałem stronę zewnętrzną. Na jednej domenie umieściłem obrazek.jpg, a na innej hotlink:
<img src='http://hotlinkowanadomena.pl/obrazek.jpg'>

Otrzymałem informację:

$_SERVER['HTTP_REFERER'] = "http://hotlinkujacy.net/podstrona/" - strona która "kradnie obrazek"
a zmienne:
$_SERVER['REDIRECT_URL'] => "obrazek.jpg" (alternatywnie [QUERY_STRING])
$_SERVER['REDIRECT_QUERY_STRING'] => name=obrazek (alternatywnie [REQUEST_URI)
informują mi który to obrazek jest "kradziony".

mirobor
Dzięki za łopatologię. Załapałem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.