Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Blokowanie dostępu do strony, sprawdzenie poprawności kodu...
Forgoot
post
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 17.03.2004
Skąd: Suwałki

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


Witam!
Jako że jestem początkujący proszę Was, abyście powiedzieli czy ten skrypt jest poprawnie napisany, jeśli nie to proszę o ewentualną poprawkę i komentarz "co źle" zrobilem... Może da się ten skrypt rozbudować, dodać "coś", jeśli tak to proszę o podpowiedzi...

  1. <?php
  2. /**************************************************************************
  3.  *  Prosty skrypt zabraniający dostępu do strony określonemu adresowi IP  *
  4.  *  zapisanego w pliku ban.txt.                                           *
  5.  **************************************************************************/
  6.  
  7. $adres = strval($_SERVER['REMOTE_ADDR']); 
  8. $ip_zbanowane = @file("ban.txt"); 
  9.     if($_SERVER['REMOTE_ADDR'] == "$ip_zbanowane")
  10.   {
  11.           /*Kod strony*/ 
  12.     }else{
  13. echo("<b>ERROR!</b> Nie masz uprawnień do oglądania tej strony.<br /> Twój IP: $adres został zbanowany.");
  14.   }
  15.  
  16. ?>


Plik ban.txt wygląda (przykładowo) tak:
Kod
127.0.0.1
127.0.0.2
127.0.0.3
127.0.0.4


Pozdrawiam.

(IMG:http://forum.php.pl/uwaga.gif)
~mike_mech

Ten post edytował Forgoot 27.10.2005, 10:11:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Funkcja file() zwraca tablicę, co oznacza, że ta linia:
  1. <?php
  2.  
  3. //...
  4. if($_SERVER['REMOTE_ADDR'] == "$ip_zbanowane")
  5. //...
  6.  
  7. ?>

Jest błędna bo porównujesz stringa do tablicy i to jeszcze źle to robisz (po co Ci znaki cudzysłowiu ).
Lepiej będzie:
  1. <?php
  2.  
  3. //...
  4. if( in_array( $_SERVER['REMOTE_ADDR'], $ip_zbanowane ) )
  5. //...
  6.  
  7. ?>

Teraz php sprawdzi czy adres usera jest w tablicy IP zbanowanych userów.

P.S. $_SERVER może zawierać mało wiarygodny adres IP, aby mieć większą pewnośc co do adresu, użyj funkcji:
  1. <?php
  2. function GetClientIP()
  3. {
  4. $ip = 0;
  5.  
  6. if( ! empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) )
  7. {
  8. $ip = $_SERVER[ 'HTTP_CLIENT_IP' ];
  9. }
  10.  
  11. if( ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) )
  12. {
  13. $ipList = explode( ", ", $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] );
  14. if( $ip )
  15. {
  16. array_unshift( $ipList, $ip );
  17. $ip = 0;
  18. }
  19. foreach( $ipList as $v )
  20. {
  21. if( ! eregi( "^(192.168|172.16|10|224|240|127|0.", $v ) )
  22. {
  23. return $v;
  24. }
  25. }
  26. }
  27.  
  28. return $ip ? $ip : $_SERVER[ 'REMOTE_ADR' ];
  29. }
  30.  
  31. ?>
Go to the top of the page
+Quote Post
Forgoot
post
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 17.03.2004
Skąd: Suwałki

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


1. Czy kod powinien wyglądać tak?? :
  1. <?php
  2.  
  3. /**************************************************************************
  4.  *  Prosty skrypt zabraniający dostępu do strony określonemu adresowi IP  *
  5.  *  zapisanego w pliku ban.txt.                                           *
  6.  **************************************************************************/
  7.  
  8. $adres = strval($_SERVER['REMOTE_ADDR']); 
  9. $ip_zbanowane = @file("ban.txt"); 
  10.    
  11.    function GetClientIP()
  12. {
  13.     $ip = 0;
  14.     
  15.     if( ! empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) )
  16.     {
  17.         $ip = $_SERVER[ 'HTTP_CLIENT_IP' ];
  18.     }
  19.     
  20.     if( ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) )
  21.     {
  22.         $ipList = explode( ", ", $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] );
  23.         if( $ip )
  24.         {
  25.             array_unshift( $ipList, $ip );
  26.             $ip = 0;
  27.         }
  28.         foreach( $ipList as $v )
  29.         {
  30.             if( ! eregi( "^(192.168|172.16|10|224|240|127|0.", $v ) )
  31.             {
  32.                 return $v;
  33.             }
  34.         }
  35.     }
  36.  
  37.     return $ip ? $ip : $_SERVER[ 'REMOTE_ADR' ] == $ip_zbanowane;
  38. } 
  39. echo("<b>ERROR!</b> Nie masz uprawnień do oglądania tej strony.<br /> Twój IP: $adres został zbanowany.");
  40.  
  41. ?>



  1. <?php
  2.  
  3. return $ip ? $ip : $_SERVER[ 'REMOTE_ADR' ] == $ip_zbanowane;
  4.  
  5. ?>

użyłem tutaj operatora przypisania, niewiem czy dobrze i we właściwym miejscu...

LUB (drugi sposób, w jaki starałem się do skryptu dopisać Twoją funkcję @mike_mech):

  1. <?php
  2. /**************************************************************************
  3.  *  Prosty skrypt zabraniający dostępu do strony określonemu adresowi IP  *
  4.  *  zapisanego w pliku ban.txt.                                           *
  5.  **************************************************************************/
  6.  
  7. include ("funkcja.php");
  8. $adres = strval($_SERVER['REMOTE_ADDR']); 
  9. $ip_zbanowane = @file("ban.txt"); 
  10.     if( in_array( $_SERVER['REMOTE_ADDR'], $ip_zbanowane ) )
  11.   {
  12.           /*Kod strony*/ 
  13.     }else{
  14. echo("<b>ERROR!</b> Nie masz uprawnień do oglądania tej strony.<br /> Twój IP: $adres został zbanowany.");
  15.   }
  16.  
  17. ?>

Plik funkcja.php wygląda tak:
  1. <?php
  2. /******************
  3. *  funkcja.php    *
  4. *******************/
  5.  
  6. function GetClientIP()
  7. {
  8.     $ip = 0;
  9.     
  10.     if( ! empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) )
  11.     {
  12.         $ip = $_SERVER[ 'HTTP_CLIENT_IP' ];
  13.     }
  14.     
  15.     if( ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) )
  16.     {
  17.         $ipList = explode( ", ", $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] );
  18.         if( $ip )
  19.         {
  20.             array_unshift( $ipList, $ip );
  21.             $ip = 0;
  22.         }
  23.         foreach( $ipList as $v )
  24.         {
  25.             if( ! eregi( "^(192.168|172.16|10|224|240|127|0.", $v ) )
  26.             {
  27.                 return $v;
  28.             }
  29.         }
  30.     }
  31.  
  32.     return $ip ? $ip : $_SERVER[ 'REMOTE_ADR' ];
  33. }
  34.  
  35. ?>


Jeśli jest źle to prosze o nakierowanie mnie na właściwą drogę, bo szczerze mówiąc niewiedziałem zbytnio jak to zrobić poprawnie :/

2. Chciałbym też stworzyć skrypt wyświetlający losowe cytaty z pliku tekstowego. Proszę Was abyście podali mi kolejno jakie funkcje trzeba wykorzystać (czy mam zastosować randomizację?), postaram się zaprezentować potem moje "wypociny" (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował Forgoot 28.10.2005, 15:00:14
Go to the top of the page
+Quote Post
Sabistik
post
Post #4


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


  1. <?php
  2.  
  3. function GetClientIP()
  4. {
  5. $ip = 0;
  6.  
  7. if( ! empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) )
  8. {
  9. $ip = $_SERVER[ 'HTTP_CLIENT_IP' ];
  10. }
  11.  
  12. if( ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) )
  13. {
  14. $ipList = explode( ", ", $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] );
  15. if( $ip )
  16. {
  17. array_unshift( $ipList, $ip );
  18. $ip = 0;
  19. }
  20. foreach( $ipList as $v )
  21. {
  22. if( ! eregi( "^(192.168|172.16|10|224|240|127|0.", $v ) )
  23. {
  24. return $v;
  25. }
  26. }
  27. }
  28.  
  29. return $ip ? $ip : $_SERVER[ 'REMOTE_ADR' ];
  30. }
  31.  
  32. $banArr = file("ban.txt");
  33. if(in_array(GetClientIP(), $banArr) )
  34. echo "<b>ERROR!</b> Nie masz uprawnień do oglądania tej strony.<br /> Twój IP:".GetClientIP()." został zbanowany.";
  35.  
  36.  
  37. ?>
Go to the top of the page
+Quote Post
mike
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Co do 1. @Sabistik podał Ci odpowiedź.

A co do:
Cytat(Forgoot @ 2005-10-28 15:56:28)
2. Chciałbym też stworzyć skrypt wyświetlający losowe cytaty z pliku tekstowego.

  1. <?php
  2.  
  3. $arrQuotes = file( 'quotes.txt' );
  4. echo array_rand( $arrQuotes );
  5.  
  6. ?>

Gdzie plik quotes.txt wygląda tak:
Cytat
I spraw Panie aby nam się chciało tak bardzo jak nam się nie chce.
Nie dyskutuj z debilem! Najpierw sprowadzi Cię do swojego poziomu, a potem pokona doświadczeniem.
Jak najdzie Cię ochota na pracę, usiądź i poczekaj aż przejdzie.

Wystarczy poczytać Manuala.
Albo użyć wyszukiwarki forum, wpisać do niej losowanie i znaleśc to: losowanie liczb z tablicy (temat identyczny, bo co za różnica co losujemy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )

Zaniedbywanie manuala i wyszukiwarki jest na tym forum karane (IMG:http://forum.php.pl/style_emoticons/default/aaevil.gif)
Go to the top of the page
+Quote Post
Forgoot
post
Post #6





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 17.03.2004
Skąd: Suwałki

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


Znalazłem, napisałem, w ten sam dzień co zadałem pytanie dot. losowych cytatów, ale niestety nie mam (chwilowo) dostępu do internetu 24 godziny na dobę.... więc piszę dziś (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Oto moje rozwiązania dotyczące losowych cytatów:
dwa kody wyświetlające losowe cytaty (pobierane z tablicy)
1.
  1. <?php
  2. /*********************************
  3.  * Prosty skrypt wyświetlający * 
  4.  * losowy cytat tablicy *
  5.  * version: 0.2  *
  6.  *********************************/
  7.  
  8. echo("Losowy cytat: ");
  9. //tablica zawierająca cytaty
  10. $cytat = array(
  11. '1' => 'Jakiś cytat 1',
  12. '2' => 'Jakiś cytat 2',
  13. '3' => 'Jakiś cytat 3',
  14. '4' => 'Jakiś cytat 4',
  15. '5' => 'Jakiś cytat 5'
  16. ); 
  17.  
  18. $numer=rand(1,5);
  19.  
  20. echo ("$cytat[$numer]");
  21. ?>



2.
  1. <?php
  2. /*********************************
  3.  * Prosty skrypt wyświetlający * 
  4.  * losowy cytatz tablicy *
  5.  * version: 0.2  *
  6.  *********************************/
  7.  
  8. echo("Losowy cytat: ");
  9.  
  10. //tablica zawierająca cytaty
  11. $cytat = array(
  12. '1' => 'Jakiś cytat 1',
  13. '2' => 'Jakiś cytat 2',
  14. '3' => 'Jakiś cytat 3',
  15. '4' => 'Jakiś cytat 4',
  16. '5' => 'Jakiś cytat 5',
  17. '6' => 'Jakiś cytat 6',
  18. '7' => 'Jakiś cytat 7',
  19. '8' => 'Jakiś cytat 8',
  20. '9' => 'Jakiś cytat 9',
  21. '10' => 'Jakiś cytat 10'
  22. ); 
  23.  
  24. srand((float) microtime() * 10000000); //inicjujemy generator liczb losowych 
  25.  
  26. $cytat = $cytat[array_rand($cytat)]; //wybieramy jeden losowy cytat z tablicy
  27.  
  28. echo "[ $cytat ]"; //wyświetlamy losowy cytat
  29. ?>


3 Tutaj napisałem kod podobnego skryptu do tych w/w, tylko teraz cytaty pobierane są z pliku...

  1. <?php
  2. /*********************************
  3.  * Prosty skrypt wyświetlający * 
  4.  * losowy cytat, pobierany z *
  5.  * pliku: cytat.txt  *
  6.  *********************************/
  7.  
  8. echo("Losowy cytat: ");
  9. $cytat = array();
  10.  
  11. $file = file('cytat.txt'); 
  12. srand((float) microtime() * 10000000); //inicjujemy generator liczb losowych 
  13.  
  14. $cytat = $file[array_rand($file)]; 
  15.  
  16. echo "[ $cytat ]"; //wyświetlamy losowy cytat 
  17. ?>


Plik cytat.txt wygląda tak:
Kod
Jakiś cytat 1
Jakiś cytat 22
Jakiś cytat 3
Jakiś cytat 45
Jakiś cytat 1200
Jakiś cytat 8


Prosiłbym abyście powiedzieli czy nie ma błędów (czy składnia jest zachowana itp...), jeśli są to proszę o komentarz... Dzięki bardzo.
Pozdrawiam!
Go to the top of the page
+Quote Post
mike
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Dobry programista to leniwy programista, taki, który tobi wszystko jak najprościej. W przykładach, które podałeś jest za dużo kombinowania.
Po co robić tak:
  1. <?
  2. $file = file('cytat.txt'); 
  3. srand((float) microtime() * 10000000); //inicjujemy generator liczb losowych 
  4. $cytat = $file[array_rand($file)]; 
  5. ?>

Skoro można tak:
  1. <?php
  2. </php
  3. $arrQuotes = file( 'quotes.txt' );
  4. echo array_rand( $arrQuotes );
  5. ?>
:?:

Składnia jest zachowana i jako takich błędów nie ma. Ale są to rozwiązania bardzo kipskie.

Czytałeś w ogóle posta, którego napisałem powyżej :?:

Cytat z manuala funkcji srand()
Cytat
Notatka: Począwszy od php 4.2.0, nie trzeba już inicjować generatora liczb losowych przed użyciem.
Go to the top of the page
+Quote Post
Forgoot
post
Post #8





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 17.03.2004
Skąd: Suwałki

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


Ok, dzięki @mike_mech za pomoc (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) .
Cytat
Dobry programista to leniwy programista..
na przyszłoś zapamiętam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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.08.2025 - 16:02