🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.www.server-side
2 messages
2 total messages Started by RM Thu, 30 Apr 2020 01:57
problem z logowaniem mimo poprawnego pliku .htpass
#61530
Author: RM
Date: Thu, 30 Apr 2020 01:57
78 lines
3104 bytes
Mam prawdopodobnie problem z plikiem .htpass utworzonym przez program 
htpasswd.

Użytkownik Robert może się zalogować z hasłem hasło_Roberta, a 
użytkownik Adam z hasłem hasło_Adama nie.

Tzn. mam:

$ head ~robert/public_html/.htaccess
#v+
AuthUserFile "/home/robert/resources/.htpass"
AuthName "Strony zabezpieczone"
AuthType Basic
require valid-user

$ cat ~robert/resources/.htpass
Adam:$apr1$SBuOrH52$npHXYtgKVDJMaq6vR3PKT1
Robert:$apr1$bBUEgXpC$oqJ05771CIL3VXhPDz8nK.

$ htpasswd -v ~robert/resources/.htpass Robert
Enter password:hasło_Robeta
Password for user Robert correct.

$ htpasswd -v ~robert/resources/.htpass Adam
Enter password: hasło_Adama
Password for user Adam correct.

$ ls -la ~robert/resources/.htpass
-rw-rw-r-- 1 robert www-data 176 kwi 29 22:25 .htpass

$ cat ~robert/public_html/strona.php

...

function authenticate() {
     if (!isset($_SERVER['PHP_AUTH_PW'])) {
         // wyświetl okienko:
         header('HTTP/1.0 401 Authorization Required');
         header("WWW-Authenticate: Basic realm=Logowanie do systemu");
         exit;
     }
     $currentAdmin = ... // wpisany login, 'Adam' albo 'Robert'
     $users =array('Adam', 'Robert');
     $passwords = array('hasło_Adama', 'hasło_Roberta');
     if (!isset($_SERVER['PHP_AUTH_PW']) ||
         $passwords[array_search($currentAdmin, $users)] != 
$_SERVER['PHP_AUTH_PW'] ||
         !in_array($currentAdmin, $users)) { // złe hasło
         header("WWW-Authenticate: Basic realm=Logowanie do systemu");
         header("HTTP/1.0 401 Unauthorized");
         echo '*** Niepowodzenie logowania ***';
         return FALSE;
     } else { // dobre hasło

...

     }
     return TRUE; // zalogowany
}

...

$ lynx localhost/~robert/strona.php

Username for 'Strony zabezpieczone' at server 'localhost':Robert
Password:hasło_Roberta

POPRAWNIE POKAZUJE WITRYNĘ

$ lynx localhost/~robert/strona.php

Username for 'Strony zabezpieczone' at server 'localhost':Adam
Password:hasło_Adama

POKAZUJE SIĘ:   *** Niepowodzenie logowania ***

Nie wiem dlaczego tak się dzieje. Programu htpasswd użyłem zgodnie z 
dokumentacją man. Proszę o pomoc.
Re: problem z logowaniem mimo poprawnego pliku .htpass
#61531
Author: PawelS pawel(at)wbcd(dot)pl
Date: Thu, 30 Apr 2020 17:30
88 lines
4058 bytes
RM pisze:
> Mam prawdopodobnie problem z plikiem .htpass utworzonym przez program 
> htpasswd.
> 
> Użytkownik Robert może się zalogować z hasłem hasło_Roberta, a 
> użytkownik Adam z hasłem hasło_Adama nie.
> 
> Tzn. mam:
> 
> $ head ~robert/public_html/.htaccess
> #v+
> AuthUserFile "/home/robert/resources/.htpass"
> AuthName "Strony zabezpieczone"
> AuthType Basic
> require valid-user
> 
> $ cat ~robert/resources/.htpass
> Adam:$apr1$SBuOrH52$npHXYtgKVDJMaq6vR3PKT1
> Robert:$apr1$bBUEgXpC$oqJ05771CIL3VXhPDz8nK.
> 
> $ htpasswd -v ~robert/resources/.htpass Robert
> Enter password:hasło_Robeta
> Password for user Robert correct.
> 
> $ htpasswd -v ~robert/resources/.htpass Adam
> Enter password: hasło_Adama
> Password for user Adam correct.

Ta opcja "-v" ma zweryfikować hasło ?

> $ ls -la ~robert/resources/.htpass
> -rw-rw-r-- 1 robert www-data 176 kwi 29 22:25 .htpass
> 
> $ cat ~robert/public_html/strona.php
> 
> ...
> 
> function authenticate() {
>     if (!isset($_SERVER['PHP_AUTH_PW'])) {
>         // wyświetl okienko:
>         header('HTTP/1.0 401 Authorization Required');
>         header("WWW-Authenticate: Basic realm=Logowanie do systemu");
>         exit;
>     }
>     $currentAdmin = ... // wpisany login, 'Adam' albo 'Robert'
>     $users =array('Adam', 'Robert');
>     $passwords = array('hasło_Adama', 'hasło_Roberta');
>     if (!isset($_SERVER['PHP_AUTH_PW']) ||
>         $passwords[array_search($currentAdmin, $users)] != 
> $_SERVER['PHP_AUTH_PW'] ||
>         !in_array($currentAdmin, $users)) { // złe hasło
>         header("WWW-Authenticate: Basic realm=Logowanie do systemu");
>         header("HTTP/1.0 401 Unauthorized");
>         echo '*** Niepowodzenie logowania ***';
>         return FALSE;
>     } else { // dobre hasło
> 
> ...
> 
>     }
>     return TRUE; // zalogowany
> }

Jeśli dobrze rozumiem powyższy kod, to sam sprawdzasz poprawność hasła ?
To może problemem jest ta linia:
> $currentAdmin = ... // wpisany login, 'Adam' albo 'Robert'
Tu powyżej masz wpisany tylko jeden login,
a próbujesz zalogować się dwa razy,
używając jednego a potem drugiego loginu.

Tutaj poniżej też widzę nie poprawną konstrukcję
> $users =array('Adam', 'Robert');
> $passwords = array('hasło_Adama', 'hasło_Roberta');
To bardzo niebezpieczny zapis, kiedy indeksy przestaną być zbieżne,
hasła będą przypisane do innych loginów.
Nie lepiej zapisać to tak: ?
$USERPASS =array('Adam'=>'hasło_Adama', 'Robert'=>'hasło_Roberta');

Poza tym naprawdę używasz polskich liter w haśle ?
może gdybyś zamiast 'hasło_Adama' zastosował:
'hasło_Huberta'
'hasło_Roberta'
może problem jest z polskimi literami i kodowanie (tak tylko wymyślam) ?

Przede wszystkim najpierw wyłączył bym własne sprawdzanie hasła.
W pierwszej kolejności sprawdziłbym czy w apache wywołanie
pliku / strony np: index.html działa.
W drugiej kolejności próbowałbym ze skryptem.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads