Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Blokowanie dostępu do strony, sprawdzenie poprawności kodu...
Forgoot
post 27.10.2005, 09:56:16
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.


~mike_mech

Ten post edytował Forgoot 27.10.2005, 10:11:57


--------------------
"Nie bój się krytyki, ale pochwały lękaj się bardzo"
Zapraszam: www.Przerosl.com.pl !
Go to the top of the page
+Quote Post
mike
post 27.10.2005, 10:04:11
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 28.10.2005, 14:56:28
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" biggrin.gif

Ten post edytował Forgoot 28.10.2005, 15:00:14


--------------------
"Nie bój się krytyki, ale pochwały lękaj się bardzo"
Zapraszam: www.Przerosl.com.pl !
Go to the top of the page
+Quote Post
Sabistik
post 28.10.2005, 15:06:58
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 28.10.2005, 17:05:32
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 smile.gif )

Zaniedbywanie manuala i wyszukiwarki jest na tym forum karane aaevil.gif
Go to the top of the page
+Quote Post
Forgoot
post 29.10.2005, 14:30:38
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ś 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!


--------------------
"Nie bój się krytyki, ale pochwały lękaj się bardzo"
Zapraszam: www.Przerosl.com.pl !
Go to the top of the page
+Quote Post
mike
post 29.10.2005, 14:40:36
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 29.10.2005, 15:16:26
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 biggrin.gif .
Cytat
Dobry programista to leniwy programista..
na przyszłoś zapamiętam winksmiley.jpg


--------------------
"Nie bój się krytyki, ale pochwały lękaj się bardzo"
Zapraszam: www.Przerosl.com.pl !
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 09:44