Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Blokada hotlink
LamaMASTER
post
Post #1





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
Nastolatek
post
Post #2





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 12.05.2006

Ostrzeżenie: (0%)
-----


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. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #3





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
siemakuba
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #5





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Zaraz sprawdzę Twój kodzik

edit

Dzięki, dziala. No i z $_SERVER{'HTTP_REFERER'} (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Tylko musiałem podać dokładny adres do podstrony (IMG:http://forum.php.pl/style_emoticons/default/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);

Ten post edytował LamaMASTER 4.06.2006, 12:37:28
Go to the top of the page
+Quote Post
dopy
post
Post #6





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 25.07.2005

Ostrzeżenie: (0%)
-----


A nie lepiej skorzystac z parse_url" title="Zobacz w manualu php" target="_manual (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #7





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Dzięki za funkcję (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
dopy
post
Post #8





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 25.07.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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.

Ten post edytował dopy 9.06.2006, 14:49:13
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #9





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

edit

Kurzcze mistrzu, wrzucam taki .htaccess nawet na inne moje serwery z downloadem dla strony i też działa jak trzeba (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) O to chodziło - teraz user jest zmuszony pobierać tylko z mojej strony nawet jeśli zna ścieżkę do pliku (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował LamaMASTER 9.06.2006, 15:08:34
Go to the top of the page
+Quote Post
dopy
post
Post #10





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 25.07.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Cieszę się że mogłem pomóc. Pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
em1X
post
Post #11





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
Hacker
post
Post #12





Grupa: Zarejestrowani
Postów: 225
Pomógł: 0
Dołączył: 1.11.2005

Ostrzeżenie: (0%)
-----


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ć

Ten post edytował Hacker 9.06.2006, 16:26:16
Go to the top of the page
+Quote Post
dopy
post
Post #13





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 25.07.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #14





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


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?

Ten post edytował LamaMASTER 12.06.2006, 16:16:58
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #16





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


No ale w tablicach też działa { i }, więc?
Go to the top of the page
+Quote Post
em1X
post
Post #17





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


więc używaj jak ci wygodniej, bo prędkości są praktycznie takie same dla obu metod
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #18





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


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)?
Go to the top of the page
+Quote Post
em1X
post
Post #19





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #20





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


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* (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ale dzięki za odpowiedź, już się przyzwyczaiłem do { i } (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.10.2025 - 01:28