Skocz do zawartości
Zaloguj się, aby obserwować  
Gość Łukasz Tkacz

Blokada dostępu w .htaccess

Polecane posty

Gość Łukasz Tkacz

Witam,

mam na serwerze dosyć pokaźnych rozmiarów download, porzera on ok. 80% transferu. Ostatnio w cpanelu zauważyłem, że sporo plików jest ściaganych bez wejścia na stronę wię chcę ukrucić ten "proceder" - nie mam zamiaru sponsorować komuś downloadu.

 

Sprawa wygląda tak, mam wszytskie pliki w poszczególnych katalogach np:

 

moja_domena/downloads/a1/plik1.rar

 

Chcę aby wpisanie takiego adresu spowodowało wyświetlenie błędu z informacją o braku dostępu, na stornie korzystam ze skryptu extreme-fusion więc chciałbym aby akceptowane były tylko i wyłącznie żadania typu:

 

moja_domena/downloads.php?cat_id=X&download_id=Y

 

gdzie X i Y to oczywiście odpowiednie zmienne.

 

Z pewnością da się coś takiego zrobić, tylko jak?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Przez mod_rewrite. Korzystając z niego możesz rozwiązać swój problem nawet bardziej kompleksowo - pozwolić na sciąganie plików tylko i wyłącznie jeśli w nagłówku Referer znajduje się adres Twojej strony. W google szukaj czegoś o "prevent hotlinking".

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ostatnio napisałem na własne potrzeby skrypt downloadu ze zliczaniem ściągnieć oparty na BD sql.

http://download.blueforum.pl/ - znajdźcie docelową ścieżkę do plików :D

 

 

Nie jest on dopracowany, bo mam problem z rozpoznawaniem typów plików - aby FLV działały w web playerach ;) jak ktoś zna rozwiązanie tego problemu, to czekam na kontakt

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mona sprawdzać referujący adres i jeśli nie pokrywa sie z twoim to porostu przekierowywać na stronę główną twojego serwisu zamiast na plik.

 

Wystarczy do pliku download dodać w odpowiednim miejscu coś takiego:

<?php 
if (!strstr($_SERVER['HTTP_REFERER'], "twojadomena.pl")) {
die('<h1>Nieuprawnione przekierowanie</h1>');
}
?>

 

Kod pisany w pośpiechu może nie działać ale wiesz o co chodzi.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Łukasz Tkacz

Ale chodzi o to aby ktoś nie mógł wpisać BEZPOŚREDNIEGO adresu do pliku (tzn. mógł ale żeby wtedy wywaliło mu brak dostępu), zmiany w downloads.php nie są mi w ogóle potrzebne (no chyba żeby zlikwidować używanie programów takich jak FlashGET.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Łukasz Tkacz

Niewiedzieć czemu nie moge dytować posta więc, wrzuciłem do htaccess coś takiego:

 

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\\.)?jacenter.pl/.*$ [NC] 
RewriteRule \\.(rar|zip|7zip)$ - [F]

 

ale nic to nie dało, dostęp bezprośredni nadal działa. Spróbowałem tak:

 

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\\.)?jacenter.pl/downloads.php.*$ [NC] 
RewriteRule \\.(rar|zip|7zip)$ - [F]

 

Nadal to samo :|

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Masz dwa warunki:

(Jeśli referer NIE jest pusty) I (jeśli referer się nie zgadza) TO odrzuć

 

W przypadku kiedy referer jest pusty (odwołanie bezpośrednie), pierwszy warunek się nie zgadza więc regułka się nie wykonuje.

Proponuje zmienić pierwszy warunek na:

RewriteCond %{HTTP_REFERER} ^$ [OR]

 

Dla poprawienia wydajności zmieniłbym w ogóle nieco strukturę tego przekierowania:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} \.rar$|\.zip$|\.7zip$ [NC]
RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^http://(www\\.)?jacenter.pl/downloads.php.*$ [NC]
RewriteRule .* - [F]

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Łukasz Tkacz

Teraz jest zablokowane tak bezpośrednio jak i z poziomu downloads.php...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Hmm.. nie wiem co znaczy "teraz" - czy po zmianie jednej linijki czy w ogóle po zmianie całej regułki. Tak w ogóle to ta linijka mi trochę podpada:

RewriteCond %{HTTP_REFERER} !^http://(www\\.)?jacenter.pl/downloads.php.*$ [NC]

 

Czemu właściwie jest tam podwójny backslash? Zresztą.. nie chce mi się już nawet nad tym zastanawiać, chory jestem.. Rzuć okiem do dokumentacji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Łukasz Tkacz

Dałem:

 

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?jacenter.pl/downloads.php.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?forum.jacenter.pl/.*$ [NC]
RewriteRule .*\.(rar|zip|7zip)$ - [F]

 

i bezpośredni nie działa, przez downloads.php jest ok, przez te które były na forum też, ale jeżeli link do downloads.php jest na jakiejś innej stronie to nie działa :/ Chcę aby było zablokowane tylko bezpośrednie ściąganie...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Przepraszam ale nie lubię dawać nic na tacy. Może po prostu postaraj się zrozumieć jak to działa...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(rar|zip|7zip)$ - [F]

 

A to działa jak chcesz?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Łukasz Tkacz

Po wprowadzeniu czegoś takiego blokuje mi dostęp ze wszystkich możliwych stron (także downloads.php)

 

@pleple - nie ma sprawy, tylko poproszę o manuala w języku polskim. Widziałem po angielsku ale tam już zupełnie nic nie rozumiem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×