logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

PHP - jak napisać kod do filtrowania dostępu na podstawie IP?

Chyllus 30 Sie 2007 18:27 6948 10
REKLAMA
  • #1 4232977
    Chyllus
    Poziom 17  
    Posty: 237
    Pomógł: 14
    Ocena: 3
    Witam serdecznie!
    Czy umie ktos napisać kod w PHP który bedzie pobierał nr IP uzytkownika odwiedzajacego strone i na jego podstawie dawal dostep do dalszych części strony?
    Ma to dzialac tak ze gdy nr IP bedzie zgodny z numerami wczesniej okresonymi uzytkownik otrzyma wted dostep do reszty zawartosci strony.

    Z góry dziękuję za pomoc.
    Pozdrawiam
  • REKLAMA
  • #2 4233487
    adamsky.net
    Poziom 12  
    Posty: 24
    Pomógł: 3
    Ocena: 1
    Najprostszy kod wyświetlający IP:

    
    echo getenv('REMOTE_ADDR');
    


    Jeśli chodzi o dostęp na podstawie IP do CAŁYCH stron to proponuje mniej więcej tak:

    na samej "górze" pliku strony wstawiasz krótki kod php działający wg. poniższej zasady:

    1. pobierasz ip (liste ip) z pliku
    2. sprawdzasz czy ktoreś z nich jest zgodne z "getenv('REMOTE_ADDR');"
    3a. jeśli tak - nie robisz nic, czyli procedura się kończy a strona ładuje
    3b. jeśli nie - to dajesz
    
    header('Location: http://www.strona.com/zabroniony.html');
    


    gdzie oczywiście http... to adres Twojej strony z informacją o blokadzie dostępu.

    Jeśli chcesz aby sprawdzanie IP dotyczyło tylko poszczególnych sekcji strony to punkty 1 i 2 od razu po załadowaniu strony i ustawiają jakąś zmienną (np. $is_ip=0/1) na podstawie której potem includujesz konkretne moduły lub nie.

    Jeśli będziesz miał problemy to daj znać - weekend mam wolny to mogę Ci coś "machnąć"...

    Pozdrawiam
  • REKLAMA
  • #3 4268316
    Chyllus
    Poziom 17  
    Posty: 237
    Pomógł: 14
    Ocena: 3
    Wielkie dzięki! A czy kolega adamsky.net mógłby zrobić mi taką przykładową stronkę..?
    Zebym mógł się na czymś oprzeć..
  • #4 4268494
    adamsky.net
    Poziom 12  
    Posty: 24
    Pomógł: 3
    Ocena: 1
    Nie ma problemu, mogę "skrobnąć" coś prostego dla przykładu, tylko, że trzeba by poczekać ze 3 dni najdalej :)
  • REKLAMA
  • REKLAMA
  • #6 4272358
    Chyllus
    Poziom 17  
    Posty: 237
    Pomógł: 14
    Ocena: 3
    Chcialbym jeszcze dodać ze dostęp mają mieć osoby o adresie np 207.142.xxx.xxx i Tylko właśnie Ci których 6 pierwszych cyfr sie zgadza z tym adresem. A reszta cyfr numeru IP w tym przypadku jest różna i bez znaczenia i na jej podstawie juz tego dostępu sie nie uzyskuje.
    Podsumowując dostęp uzyskiwany jest na podstawie zgodności 6 pierwszych cyfr z wcześniej zadeklarowanym numerem IP
  • #7 4282366
    mirek1221
    Poziom 11  
    Posty: 9
    Może coś w tym stylu:

    
    // dwie pierwsze liczby adresu do którego porównujemy użytkowników 
    $adresWzorcowy = "127.0."; 
    
    //adres użytkownika 
    $adresIp = getenv('REMOTE_ADDR');
    
    // wybieramy z adresu użytkownika pierwsze dwie liczby 
    $wzor = substr($adresIp,0,(strpos($adresIp,'.',(strpos($adresIp,'.')+1))+1));
    
    // i porównujemy je z adresem wzorcowym 
    if (strcmp($adresWzorcowy,$wzor))
    	echo '<br>zly adres';
    	else
    	echo '<br>pasuje';
    


    W PHP5 zadziała też taki kod:

    
    // dwie pierwsze liczby adresu do którego porównujemy użytkowników 
    $adresWzorcowy = "127.0."; 
    
    //adres użytkownika 
    $adresIp = getenv('REMOTE_ADDR');
    
    if (substr_compare($adresIp,$adresWzorcowy,0,(strpos($adresIp,'.',(strpos($adresIp,'.')+1))+1)))
    	echo '<br>zly adres';
    	else
    	echo '<br>pasuje';
    
  • #8 4327733
    DjCzarny
    Poziom 2  
    Posty: 4
    Może tak:

    
    <?php
    $ip = 'tutaj ip'; // IP osoby ktora moze wejsc na strone
    $pobieranie = $_SERVER['REMOTE_ADDR'];
    if($ip==$pobieranie){
    header('Location: twojastrona2.html');
    }
    else
    {
    echo 'brak dostepu do strony';
    exit;
    }
    
    Dalsza czesc strony...
    
  • #9 4343153
    scr011
    Poziom 1  
    Posty: 1
    Kod napisał:
    
    header('Location: twojastrona2.html');
    


    Nie jest to za idealny sposób. Narażony jest na skanowanie serwera i wykrycie "twojastrona2.html" i bezproblemowy dostęp do niego.

    Proponuje inkludowanie odpowiedniego pliku gdzie nazwa jest hash'owana kilkakrotnie w md5... i ustawionym chmod'em powodujący niedostępność dla innych użytkowników z sieci. Plik ma być dostępny tylko dla skryptu lub administratora FTP/Servera ;)

    Drugie wyjście łatwiejsze, ale wprowadzające chaos do kodu jest wstawienie całego kodu html "twojastrona2.html" w funkcje echo gdy IP będzie zgodne. Inaczej exit();
  • #10 4343885
    Kuba_eM
    Poziom 24  
    Posty: 654
    Pomógł: 36
    Ocena: 77
    Aby uniknąć powyższej sytuacji, w pliku "twojastrona2.html" powinieneś wymusić konieczność sprawdzenia z jakiej strony został on wywołany, np z użyciem funkcji $_SERVER["HTTP_REFERER"] i porównaniem z wartością poprawną.
  • #11 4358073
    William Bonawentura
    Poziom 34  
    Posty: 2414
    Pomógł: 186
    Ocena: 609
    Chyllus napisał:
    Witam serdecznie!
    Czy umie ktos napisać kod w PHP który bedzie pobierał nr IP uzytkownika odwiedzajacego strone i na jego podstawie dawal dostep do dalszych części strony?
    Ma to dzialac tak ze gdy nr IP bedzie zgodny z numerami wczesniej okresonymi uzytkownik otrzyma wted dostep do reszty zawartosci strony.

    Z góry dziękuję za pomoc.
    Pozdrawiam


    Taki efekt możesz uzyskać 1 dyrektywą w apache.ini lub .htaccess

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji filtrowania dostępu do strony internetowej w PHP na podstawie adresu IP użytkownika. Proponowane rozwiązania obejmują pobieranie adresu IP za pomocą zmiennej środowiskowej REMOTE_ADDR oraz porównywanie go z listą dozwolonych adresów IP przechowywanych w pliku lub zmiennej. W przypadku zgodności użytkownik uzyskuje dostęp do zawartości strony, w przeciwnym razie następuje przekierowanie na stronę z informacją o braku dostępu. Wskazano także możliwość ograniczenia dostępu na podstawie częściowego dopasowania adresu IP, np. pierwszych dwóch oktetów (np. "207.142.") z wykorzystaniem funkcji substr, strpos, strcmp lub substr_compare. Podkreślono, że proste przekierowanie może być podatne na obejście, dlatego zasugerowano stosowanie mechanizmów takich jak ukryte, haszowane nazwy plików z odpowiednimi uprawnieniami chmod lub weryfikację referera HTTP w celu zabezpieczenia dostępu. Alternatywnie, filtrowanie IP można również zrealizować na poziomie serwera Apache za pomocą dyrektyw w pliku .htaccess lub apache.ini.
Wygenerowane przez model językowy.
REKLAMA