Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

problem z logowaniem mimo poprawnego pliku .htpass

0 views
Skip to first unread message

RM

unread,
Apr 29, 2020, 9:57:13 PM4/29/20
to
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.

PawelS pawel(at)wbcd(dot)pl

unread,
Apr 30, 2020, 1:31:12 PM4/30/20
to
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.
0 new messages