[PHP] Blokowanie dostepu do strony danym IP

0

Witam.

Mam stronke i chciałbym żeby do niego miały dostep dane IP.

Widze to tak zrobione :

Wchodząc na daną strone w katalogu ( index.php). Skrypt sprawdza mój IP. Jesżeli jest wpisany do pliku (np ip.txt) to mnie wpuszcza jeżeli nie wyświetla stronkę z info że niemam dostepu (moją strona np brak.htm).

Dzięki bardzo za pomoc jaka kolwiek.
Wydaje mi ise że to jest naprawde łatwe, ale nie dla mnie :).

THX

0

php ucze sie od dokladnie 18 sierpnia tzn prawie 2 tyg i wydaje mi sie to w miare proste, np. jezeli nie chce ci sie myslec za duzo wystarczy posklejac troche artykulow i faq'ow z 4p + cos od siebie:
http://4programmers.net/view_faq.html?id=248
http://4programmers.net/view_faq.html?id=251
cos jeszcze pewnie sie znajdzie na forum jezeli dalej nie bedziesz potrafil tego zrobic to....

0

Hmm. Dzięki za artykuły ale qrcze jakoś nie mogę nic sklepać. Niewiem od czego zacząć i na czym skończyć. Czyli niewiem nic :).

Licze na dobroć forumowiczów.

0

pomysl masz dobry, teraz tylko go zrealizuj piszac odpowieni kod. Jesli czegos nie wiesz daj znac, tylko konkretne pytania prosze.

0

Hmm. Dzięki za artykuły ale qrcze jakoś nie mogę nic sklepać. Niewiem od czego zacząć i na czym skończyć. Czyli niewiem nic :).

Licze na dobroć forumowiczów.

Sam sobie odpowiedziałeś na to pytanie: czyli
po pierwsze sprawdzasz ip odwiedzającego:
powinien być w zmiennej $REMOTE_NAME

porównujesz czy masz go w pliku, najlepiej założyć petle która będzie czytać plik linia po lini i porównywać wartoś pobranego ip z tym z którego przyszło żądanie (zkładam że adresy w pliku masz wpisane w każdy w osobnej linii)
Jeśli nie znalazł takiego numeru to przekierowujesz za pomocą:
Header ("Location: brak.htm");
a jeśli jest to wyswietlasz dalszą część strony, jak masz jeszcze jakieś pytania to śmiało.

0

No to tak.

Wymyśliłem coś takiego ale niby działa ale nie dokońca :


<?
$plik=fopen("ip.dostep", "r");
flock($plik, 1);
while($linia=fgets($plik, 25)) {
$ip=chop($linia);
if($ip!=$REMOTE_ADDR) {
Header("location: brak.htm");
}
}
flock($plik, 3);
fclose($plik);
?>

A dalej strona index

W pliku ip.dostep wpisalem swoj IP lokalny : 10.1.1.3
Ok wszedłem na stronę i wpuścił mnie.
Usunąłem swój IP z pliku i tez mnie wpuścił.
Co jest nietak??

0

No to tak.

Wymyśliłem coś takiego ale niby działa ale nie dokońca :

W pliku ip.dostep wpisalem swoj IP lokalny : 10.1.1.3
Ok wszedłem na stronę i wpuścił mnie.
Usunąłem swój IP z pliku i tez mnie wpuścił.
Co jest nietak??

Bo błędnie to działa, najpierw powinieneś sprawdzić wszystkie wpisane ip, bo tak jeśli będziesz miał gościa z adresem 10.1.1.2 który będzie wpisany do pliku nap jako drugi:
10.1.1.3
10.1.1.2
to Twoja pętla sprawdzi że pierwszy ip jest inny od gościa i go przekieruje, nagłówek wyślij po sprawdzeniu wszystkich adresów, np zrób tak:

<?
$plik=fopen("ip.dostep", "r");
flock($plik, 1);
$jest="nie";
while($linia=fgets($plik, 25)) {
	$ip=chop($linia);
	if($ip == $REMOTE_ADDR) {
		$jest = "tak";
	}
}
flock($plik, 3);
fclose($plik);
If ($jest == "nie") {
	Header("Location: brak.htm");
}
?>
0

Panczo zrobiłem tak jak podałes i prawie działa.
Tyle że teraz wywala taki błąd :

Warning: Cannot add header information - headers already sent by (output started at /mnt/home/mp3/public_html/index.php:9) in /mnt/home/mp3/public_html/index.php on line 22

w tejże lini jest:

Header("location: brak.htm");

Plik istnieje w tym samym katalogu co index.php

O co teraz chodzi [glowa] [glowa] [glowa]

0

Na początku pliku index.php musisz dać

<? ob_start(); ?>

a na końcu

<? ob_end_flush(); ?>

a ja jeszcze dorzucę moje 3 grosze, mało popularne
ale takie jak by krótkie :-D

$addrs=file('adresy.txt');
for($i=0;$i<count($addrs);$i++)if($REMOTE_ADDR==chop($addrs[$i]))break;
if($i==count($addrs)){header('location:brak.htm');die();}
0

Panczo zrobiłem tak jak podałes i prawie działa.
Tyle że teraz wywala taki błąd :

Warning: Cannot add header information - headers already sent by (output started at /mnt/home/mp3/public_html/index.php:9) in /mnt/home/mp3/public_html/index.php on line 22

w tejże lini jest:

Header("location: brak.htm");

Plik istnieje w tym samym katalogu co index.php

O co teraz chodzi [glowa] [glowa] [glowa]

Łukasz wynika z tego że już jakieś nagłówki zostały wysłane do przeglądarki np użyłeś wcześniej echo, lub print
Header możesz użyć tylko przed wysłaniem innych danych do przeglądarki...

aha, musisz sobie zdawać sprawę, że takie zabezpieczenie witryny jest niepraktyczne, bo na jednym IP może być kilka komputerów (kawiarenka udostępniająca swoje łącza) lub modemowcy którzy nie mają stałego IP, najlepszy będzie moduł logowania...

0

aha, musisz sobie zdawać sprawę, że takie zabezpieczenie witryny jest niepraktyczne, bo na jednym IP może być kilka komputerów (kawiarenka udostępniająca swoje łącza) lub modemowcy którzy nie mają stałego IP, najlepszy będzie moduł logowania...

ale to jest dobre zabezpieczenie przed różnymi osobnikami takimi jak mleczasz na tym forum...
a że kawiarenka itd... no trudno!

0

Zaraz będe dalej kombinował z tym co mi podaliście.
Chce wpuszczać niektóre osoby z sieci lokalnej oraz z neta.

OK.

Zastosowałem to:

Na początku pliku index.php musisz dać

<? ob_start(); ?>

a na końcu

<? ob_end_flush(); ?>

I działa elegancko.

Dzięki wielkie za pomoc i natchnienie :)

PAPA

0

No jesli chodzi o bany to mozna troche wiecej np przegladarke itp Wiem zaraz poleci masa uwag ze przegladarke mozna zmienic ale sami sobie odpowiedzcie jak czesto zmieniacie przegladarke? Kazdy ma swoje przyzwyczajenia i to mozna wykozystac Mozna nawet glupie ciacha ktore przeciez mozna usunac ale odpowiedzcie sobie jak sami czesto to robicie? :) No ja to robie jak system instaluje od nowa :-D No wiadomo ze tylko ciacho to ban tak jak by go nie bylo ale kilka takich rzeczy i moze byc calkiem dobre zabezpieczenie :)

0

Ja jeszcze doddam, że zmienna $REMOTE_ADDR nie zawsze przechowuje właściwy adres. Zainteresowanych odsyłam do którejś z notek przy opisie getenv() na php.net.

1 użytkowników online, w tym zalogowanych: 0, gości: 1