Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z logowaniem do strony zabezpieczonej hasłem
Forum PHP.pl > Forum > Przedszkole
JaHolden
Mam taki problem. Chcę zabezpieczyć stronę hasłem za pomocą kodu umieszczonego poniżej. Nie wiem dlaczego, za każdym razem przy wpisywaniu użytkownika i hasła, nie chce zaskoczyć i wyskakuje od nowa okno logowania. Login i hasło są umieszczone w pliku "*.htpassw". Umieszczałem je tam i w postaci: "user:pass", i w postaci: "user:mtFpzr.dwUxKA" - bo gdzieś przeczytałem, że musi być to zakodowane, a na pewnej stronie znalazłem generator. Mimo moich starań, efekt jest wciąż ten sam. Mam to wrzucone na stronie: http://www.mac-pol.co.uk/1/e.php
Jeśli ktoś ma pomysł, co w tym kodzie można zmienić tak, aby działał poprawnie, będę wdzięczny.

  1. <?php 
  2. $file = 'haslo.htpassw'; 
  3. $clear_pass_file = array (); 
  4.  
  5. if ( file_exists ( $file ) ) { 
  6. $pass_file = file ( $file ); 
  7. foreach ( $pass_file as $line ) $clear_pass_file[] = preg_replace ( '/[r|\n]/', '', $line ); 
  8. } 
  9.  
  10. $user = empty ( $_SERVER['PHP_AUTH_USER'] ) ? '' : $_SERVER['PHP_AUTH_USER']; 
  11. $pass = empty ( $_SERVER['PHP_AUTH_PW'] ) ? '' : $_SERVER['PHP_AUTH_PW']; 
  12.  
  13. if ( !in_array ( $user.':'.$pass, $clear_pass_file ) ) { 
  14. header('WWW-Authenticate: Basic realm="Musisz się zalogować!"'); 
  15. header("HTTP/1.0 401 Unauthorized"); 
  16. die("Brak uprawnień do przeglądania strony"); 
  17. } 
  18. else { 
  19. echo "Witaj w strefie chronionej!"; 
  20. } 
  21. ?>
ayeo
Proszę zapoznać się z zasadami działu Przedszkole! Tytuł Twojego tematu nie zawiera obowiązkowych znaczników. Proszę go zmienić.

Co do Twojego kodu to jest on poprawny i działa! Pamiętaj, że wartość PHP_AUTH_USER jest ustawiona tylko jeżli PHP działa jako moduł Apache'a! W każdym razie u mnie na localhoście działa tak jak powinno. Pozdrawiam!

PS w pliku trzymasz zhaszowane hasło, natomiast skrypt sprawdza po niezakodowanym... Daj w pliku aaa:aaa i zobacz czy zadziała.
artega
Plik hasla przechowuj w niedostępnym miejscu dla publiki w formacie uzytkownik:haslo
  1. <?php
  2.  
  3. $hasla = file("hasla");
  4.  
  5. $auth_ok = false;
  6.  
  7. if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW']))
  8. {
  9. foreach ($hasla as $dane)
  10. {
  11. list($uzytkownik, $haslo) = explode(":", trim($dane));
  12.  
  13. if ($_SERVER['PHP_AUTH_USER'] == $uzytkownik and $_SERVER['PHP_AUTH_PW'] == $haslo)
  14. {
  15. $auth_ok = true;
  16. break;
  17. }
  18. }
  19.  
  20. if ($auth_ok)
  21. {
  22. echo "OK";
  23.  
  24. }
  25. }
  26.  
  27. header('WWW-Authenticate: Basic realm="My Realm"');
  28. header('HTTP/1.0 401 Unauthorized');
  29. echo 'Tekst do wyslania, jesli uzytkownik wcisnie przycisk Anuluj';
  30.  
  31. ?>
JaHolden
Dzięki za szybką odpowiedź.
Nie bardzo rozumeim o co chodzi z modułem Apache'a. Czy to znaczy, że na normalnym serwerze, na takim na jakim jest aktualnie wrzucony, nie ma prawa zadziałać? A jeśli jest taka możliwość, to jak to zrobić?
ayeo
A nie działa Ci jak zapiszesz hasło niezaszyfrowane?
JaHolden
No niestety nie. W tym momencie jest ustawiony plik "haslo.htpassw" w ten sposób: 1:1, i tak jak pisałem na początku, od razu po wpisaniu loginu i hasła, od razu kaze mi sie logować kolejny raz: http://www.mac-pol.co.uk/1/e.php .

Dawałem nawet różne rozszerzenia do pliku z hasłem, ale dalej nic...
JaHolden
A jeszcze jedno: jesli patrzeć na ten nowy kod, to jak mam nazwać plik z loginem i hasłem? Oraz jak się pozbyć takich oto błędów?


Warning: file(hasla) [function.file]: failed to open stream: No such file or directory in /home.51/m/a/c/macpol/www/1/aa.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at /home.51/m/a/c/macpol/www/1/aa.php:3) in /home.51/m/a/c/macpol/www/1/aa.php on line 28

Warning: Cannot modify header information - headers already sent by (output started at /home.51/m/a/c/macpol/www/1/aa.php:3) in /home.51/m/a/c/macpol/www/1/aa.php on line 29
Tekst do wyslania, jesli uzytkownik wcisnie przycisk Anuluj
artega
@JaHolden lenistwo czy brak wiedzy spowodowało, że nawet nie popatrzysz w kod?
Kod
Warning: file(hasla) [function.file]: failed to open stream: No such file or directory in /home.51/m/a/c/macpol/www/1/aa.php on line 3

To ostrzeżenie zniknie kiedy utworzysz plik hasla, najlepiej w katalogu niedostępnym dla publiki. Przeczytaj o funkcji file
Te ostrzeżenia są wynikiem tego pierwszego winksmiley.jpg
Kod
Warning: Cannot modify header information - headers already sent by (output started at /home.51/m/a/c/macpol/www/1/aa.php:3) in /home.51/m/a/c/macpol/www/1/aa.php on line 28

Warning: Cannot modify header information - headers already sent by (output started at /home.51/m/a/c/macpol/www/1/aa.php:3) in /home.51/m/a/c/macpol/www/1/aa.php on line 29
JaHolden
brak wiedzy napewno, ale nie lenistwo. Znam angielski i wiem co tam bylo napisane. Utworzylem taki plik, zmienialem jego prawa dostepu, sprawdzalem na rozne sposobi i mi sie nie udalo - dlatego kolejny raz napisalem

To co, nikt kompletnie nie ma pomysłu co z tym można zrobić?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.