Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Blokada hotlink
Forum PHP.pl > Forum > PHP
LamaMASTER
Witam,
Tworzę blokadę hotlink do mojego downloadu:
  1. <?
  2. case "pobierz":
  3. $polecajacy = $_SERVER{'HTTP_REFERER'};
  4. if (!$HTTP_REFERER) {
  5. $polecajacy = '';
  6. } 
  7.  
  8. if (empty($polecajacy)) {
  9. // pobierz plik
  10. }
  11. else {
  12. // przekieruj na stronę hotlink sucks
  13. }
  14. break;
  15. ?>

Niestety nawet przy klikaniu na link z mojej strony przekierowuije mnie na podstronę hotlink sucks. Kombinowałem już z innymi rzeczami tego typu i albo mnie przekierowuje, albo nie pobiera. Nie doszedłem jeszcze do tego jak zrobić, żeby przy klikaniu na link z innej strony przekierowywało, a prosto z mojej pobierało...
Nastolatek
Co do pierwszego nie pomogę, ale co do drugiego pytania możesz sprawdzić czy referer z którego zostało zainicjowanie rozpoczęcie ściągania pliku jest przynależny do Twojej domeny. winksmiley.jpg
LamaMASTER
Heh czego ja nie próbowałem.
Wg mnie najprościej byłoby tak:
zmienna = strona polecająca;
if (zmienna == moja domena)
pobierz
else
przekieruj
Tylko jak to teraz upraktycznić?
siemakuba
oj oj..
spójrzmy na ten kawałek kodu:
  1. <?php
  2. $polecajacy = $_SERVER{'HTTP_REFERER'};
  3. if (!$HTTP_REFERER) {
  4. ?>

po pierwsze - nie $_SERVER{'HTTP_REFERER'} a $_SERVER['HTTP_REFERER'].
po drugie - to jak wkońcu? $_SERVER['HTTP_REFERER'] czy $HTTP_REFERER?

co do samego pytania:
załóżmy, że twoja strona to www.strona.pl

  1. <?php
  2. if ($_SERVER['HTTP_REFERER'] != 'www.strona.pl')
  3. {
  4. header('Location: nie_ma_hotlinkowania.php');
  5. }
  6. else
  7. { 
  8. // tu to co potrzebujesz jezeli od ciebie z serwera
  9. }
  10. ?>


sprawdz najpierw za pomoca print_r($_SERVER); co dokładnie będzie w $_SERVER['HTTP_REFERER'] - nie pamietam czy bedzie z http:// na poczatku czy bez.
pozdr.
LamaMASTER
Cytat
po pierwsze - nie $_SERVER{'HTTP_REFERER'} a $_SERVER['HTTP_REFERER'].

Mogę to samo powiedzieć - [ i ] używa się jedynie w PHP3, we wszystkich nowszych używa się { i }, ale php jest też kompatybilne wstecz.
Cytat
po drugie - to jak wkońcu? $_SERVER['HTTP_REFERER'] czy $HTTP_REFERER?

Tutaj testowałem znowu jedną rzecz, więc tak zostało smile.gif

Zaraz sprawdzę Twój kodzik

edit

Dzięki, dziala. No i z $_SERVER{'HTTP_REFERER'} snitch.gif
Tylko musiałem podać dokładny adres do podstrony winksmiley.jpg Nie da się go jakoś oczyścić, żeby np było:
$zmienna = $_SERVER{'HTTP_REFERER'};
$zmienna = wyciągnij jedynie http://domena.pl, a to co za ukośnikiem odetnij
?

edit

Dobra, sam wpadłem na ten pomysł:
$polecajacy = $_SERVER{'HTTP_REFERER'};
$polecajacy = substr($polecajacy, 0, ILOŚĆ_LITER_DOMENY_WRAZ_Z_HTTP);
dopy
A nie lepiej skorzystac z parse_url" title="Zobacz w manualu php" target="_manual questionmark.gif smile.gif
LamaMASTER
Dzięki za funkcję smile.gif Tak czy siak na jedno wychodzi hehe

Mam jeszcze jeden problem, mianowicie statystyki pokazują mi zużycie transferu i nadal najwięcej zżera mi USA, chociaż strona jest kierowana do Polaków. Głównie chodzi o to, że chyba jakaś inna strona podpięła się pod mój download, ale jak te zabezpieczenie hotlink zjadają - nie wiem. Czy da się jakoś zrobić zabezpieczenie przed osobami z innych krajów? Tzn. żeby mogli pobierać tylko ci, którzy mieszkają w Polsce.
dopy
Ja zabezpieczam download przez plik .htaccess, kontolujący odsyłacz i dopuszczający do plików danego typu tylko z danej domeny.

Zrób sobie plik .htaccess i wrzuć w nim:
Kod
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domena\.pl [NC]
RewriteRule .*\.(zip|exe|rar|gz|tar.gz|tar)$ http://domena.pl/hotlink.html [L]


Najlepiej wrzucić w katalogu głównym, to zabezpieczenie obejmie także podkatalogi.

Oczywiście zamiast "domena" wpisz swoją nazwę z której ma być dozwolone hotlinkowanie, jak widać wymienione są typy plików do których ma kontrolować hotlinki smile.gif, można dopisać sobie inne typy jak jest taka potrzeba. Aha, no i w przypadku próby hotlinkowania z innych domen, przekieruje do pliku hotlink.html - rzecz jasna można to dowolnie modyfikować.

Mam nadzieję że ten sposób się przyda.

Pozdrawiam.
LamaMASTER
Wielkie dzięki.
Jak to działa już się domyśliłem, bo cała moja strona używa przyjaznych linków, ale nie wiedziałem, że RewriteCond potrafi zdziałać takie cuda biggrin.gif

edit

Kurzcze mistrzu, wrzucam taki .htaccess nawet na inne moje serwery z downloadem dla strony i też działa jak trzeba biggrin.gif O to chodziło - teraz user jest zmuszony pobierać tylko z mojej strony nawet jeśli zna ścieżkę do pliku biggrin.gif
dopy
No sposób ten jest dość uniwersalny i przydatny - znacznie lepiej jest zabezpieczać z poziomu dostępu do plików na serwerze niż z poziomu skryptu, ponieważ poznać prawdziwą ścieżkę pliku to nie jest duży problem smile.gif Cieszę się że mogłem pomóc. Pozdrawiam smile.gif
em1X
z tym, ze zmienna HTTP_REFERER mozna sobie wysłać samemu jakakolwiek sie chce
zabezpieczenie bazujace tylko na tym, jest po prostu lipne :/

lepiej korzystac z czegos w stylu
  1. <?php
  2. if (!defined('INPHP')) die('Brak dostępu');
  3. ?>
Hacker
Sory za [OT]
Cytat(LamaMASTER @ 4.06.2006, 11:17 ) *
Mogę to samo powiedzieć - [ i ] używa się jedynie w PHP3, we wszystkich nowszych używa się { i }, ale php jest też kompatybilne wstecz.

teraz to dałeś
poczytaj php Solutions 3/2006 o PHP6 bo nie chce mi się przepisywać
dopy
Cytat(em1X @ 9.06.2006, 15:06 ) *
z tym, ze zmienna HTTP_REFERER mozna sobie wysłać samemu jakakolwiek sie chce
zabezpieczenie bazujace tylko na tym, jest po prostu lipne :/

lepiej korzystac z czegos w stylu
  1. <?php
  2. if (!defined('INPHP')) die('Brak dostępu');
  3. ?>


Tu się oczywiście mogę zgodzić - prawie każde zabezpieczenie jest do obejścia winksmiley.jpg Ale jeśli chodzi o zwykłe podlinowywanie do plików z innych stron, to moje rozwiązanie w pełni wystarczy.

Pozdrawiam.
LamaMASTER
Cytat(Hacker @ 9.06.2006, 15:22 ) *
Sory za [OT]
teraz to dałeś
poczytaj php Solutions 3/2006 o PHP6 bo nie chce mi się przepisywać

Podaj mi dowody, że w PHP4 jest wskazane używać [ i ] zamiast { i } to uwierzę...

Aha i jeszcze jedno - czemu mam wierzyć php.pl, skoro php.net mówi całkiem inaczej?
dr_bonzo
Wyjasniam:
do tablic uzywa sie [ ] :
$_SERVER[ 'REMOTE_ADDR' ];

do wyciagania pojedynczego znaku ze stringa { }
$string = 'abc';
print( $string{1} ); // b
ale [ ] tez dziala, ale ponoc jest wolniejsze i jest niezalecane
LamaMASTER
No ale w tablicach też działa { i }, więc?
em1X
więc używaj jak ci wygodniej, bo prędkości są praktycznie takie same dla obu metod
LamaMASTER
Cytat(em1X @ 12.06.2006, 15:49 ) *
więc używaj jak ci wygodniej, bo prędkości są praktycznie takie same dla obu metod

Więc czym metody się różnią i która jest szybsza (no i dlaczego)?
em1X
Typ string to nic innego jak char* w C więc tablica. {} to pewnie konstrukcja językowa mapowana na [] w języku natywnym.

Sprawdziłem prędkość wyświetlania obiema metodami w pętli o 200k iteracjach i różnica była.. [] minimalnie szybsze.

Ale mówię, że w normalnych warunkach prędkość jest niezauważalna więc pisz jak Ci wygodniej...
LamaMASTER
Cytat(em1X @ 12.06.2006, 16:09 ) *
Typ string to nic innego jak char* w C więc tablica.

W C string to wcale nie to samo co char* smile.gif
Ale dzięki za odpowiedź, już się przyzwyczaiłem do { i } smile.gif
em1X
Chodziło mi o string w php.
Jarod
O co chodzi z tym hotlinkiem?
em1X
http://pl.wikipedia.org/wiki/Hotlink

nie masz paluszków żeby poszukać? withstupidsmiley.gif

edit:

co do hotlinkowania, warto chyba uzyc mod_rewrite.. jezeli na koncu adresu widnieje .jpg to wyswietlamy jakis brzydki fake obrazek czy cos winksmiley.jpg
Seth
Cytat(LamaMASTER @ 12.06.2006, 17:14 ) *
Podaj mi dowody, że w PHP4 jest wskazane używać [ i ] zamiast { i } to uwierzę...

Aha i jeszcze jedno - czemu mam wierzyć php.pl, skoro php.net mówi całkiem inaczej?

Jezeli chcesz uzywac to sobie uzywaj. Mozesz sie jednak niemilo zdziwic gdy Twoj skrypt, postawiony na php 6 przestanie dzialac.

Cytat(http://www.corephp.co.uk/archives/19-Prepare-for-php-6.html)
{} vs []
You can currently use both {} and [] to access string indexes. But the {} notation will raise an E_STRICT in PHP5.1 and will be gone totally in PHP6. Also the [] version will gain substr and array_slice functionality directly - so you could do "[2,]" to access characters 2 to the end, etc. Very handy.
LamaMASTER
No i wszystko jasne smile.gif
MalyKazio
Temat byl o hotlinku więc się dopisze.
Mam pytanie odnośnie kodu podanego wyżej:

Kod
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domena\.pl [NC]
RewriteRule .*\.(zip|exe|rar|gz|tar.gz|tar)$ http://domena.pl/hotlink.html [L]


Jak zmienić to, żeby przekierowanie odbywało się nie na http://domena.pl/hotlink.html a na http://domena.pl/plik.php?file=nazwapliku.

Chodzi mi o to, żeby wywoływac plik php jednoczesnie przekazujac do niego w zmiennej nazwe pliku, ktory był żadany.
LamaMASTER
Kod
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domena\.pl [NC]
RewriteRule .*\.(zip|exe|rar|gz|tar.gz|tar)$ http://domena.pl/plik.php?file=$1 [L]
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.