Aplikacje internetowe

Bełdziowe spojrzenie na aplikacje internetowe

Logowanie Apache

W przypadku logowania, które ma działać, a nie zapewniać nam ogromne możliwości konfiguracji i kontroli użytkowników możemy skorzystać z mechanizmu wbudowanego w serwer Apache. Udostępnia ono dwa tryby logowania basic oraz digest. Różnica między nimi polega na sposobie przesyłania danych do serwera. W przypadku trybu digest dane logowania (login i hasło) przesyłane są w formie skrótu (hash) dzięki czemu przechwycenie ich przez napastnika nic mu nie da (chyba, że skorzysta z tęczowych tablic). Niestety ciągle popularniejszym trybem jest basic, związane jest to z przekonaniem, że nie wszystkie przeglądarki potrafią hashować dane logowania. Jednakże jest to przestarzałe stwierdzenie, ponieważ aktualnie wszystkie popularne przeglądarki posiadają taką możliwość (np. Internet Explorer, Opera, FireFox, Konqueror).

Czas na trochę praktyki.

Metoda podstawowa.

Na początku zajmiemy się popularniejszym trybem czyli basic. Pierwszym elementem jaki musimy zrobić to wygenerowanie pliku z danymi logowania, czyli z loginami i hasłami użytkowników. Służy do tego program htpasswd dołączony do Apache (katalog bin/). Aby utworzyć użytkownika należy uruchomić powyższy program w sposób ukazany na poniższym screenie. Co ważne flagi -c używamy tylko za pierwszym razem. Służy ona do utworzenia pliku z danymi. Dobrą praktyką jest używanie standardowej nazwy pliku z hasłami czyli .htpasswd, dzięki temu Apache nie będzie umożliwiał zdalnego odczytania tego pliku.

Tworzenie użytkownika Apache

Tworzenie użytkownika Apache

Kolejnym krokiem jest utworzenie pliku .htaccess w katalogu, którego ma dotyczyć autoryzacja. Jego zawartość powinna być następująca.

AuthName "Wymagane logowanie" #komunikat pokazany na formie logowania
AuthType Basic  # określenie typu logowania
AuthUserFile .htpasswd # ścieżka do pliku z hasłami
Require user beldzio # określenie, którzy użytkownicy mają dostęp do zasobu

Efekt powyższego kodu pod Operą:

W powyższym kodzie znalazła się dyrektywa require user, która określa którzy użytkownicy mają prawo logować się do danego zasobu. W przypadku gdy użytkowników jest wielu i są oni ze sobą logicznie powiązani możemy utworzyć grupę, która ich połączy. W tym celu należy utworzyć dodatkowy plik, który będzie zawierał informację o powiązaniach. Przykład takiego pliku znajduje się poniżej.

admini: beldzio kazik admin

Po utworzeniu pliku z grupami należy zmodyfikować plik .htaccess dodając do niego:

AuthGroupFile .htgroup  # ścieżka do pliku z grupami
Require group admini # nadanie dostępu danej grupie

Metoda bezpieczna.

Korzystanie z bezpiecznej metody nie różni się znacząco od wersji podstawowej. Jedyne różnice jakie występują to tworzenie użytkowników za pomocą programu htdigest oraz zmiany w dyrektywach pliku .htaccess. AuthType przyjmuje wartość Digest oraz AuthUserFile zmienia się w AuthDigestFile.

Warto zajrzeć.

Obszerniejszy opis autoryzacji wykorzystującej modułu serwerów HTTP – Google cache


Tagi: , ,
Kategoria: Bezpieczeństwo, Apache, Bezpieczeństwo, Logowanie


10 komentarzy

  1. Hash napisał(a):

    jak piszesz w jednym z listingów
    AuthName "Wymagane logowanie" #komunika pokazany na formie logowania
    znajdź błąd :D

    Co do notki: całkiem ciekawe ujęcie problemu. Mimo wszystko jest to narzędzie dość prowizoryczne, które do pewnego momentu jest jak najbardziej fajne, jednak w pewnej chwili okazuje się zbyt mało zaawansowane. Mimo to całkiem przydatne, szczególnie do chwilowych autoryzacji.

  2. Michał "Bełdzio" Ławicki napisał(a):

    dzieki :) chyba zaczne Ci wysylac notki do korekty przed publikacja :)

  3. DiLu napisał(a):

    Cóż? Nie wspomniałeś, czy to mniej obciąża serwer od np. systemu logowania w PHP.
    BTW Link z Warto zajrzeć nie działa ;-)

  4. Michał "Bełdzio" Ławicki napisał(a):

    Czysto teoretycznie mniej, ponieważ nie ma potrzeby odpalania parsera PHP :)

  5. Lxr napisał(a):

    @Michał "Bełdzio" Ławicki ściągnąłeś tą prezentację, bo już jej nie ma w cache, a byłbym chętny?

  6. Michał "Bełdzio" Ławicki napisał(a):

    Niestety nie ;/

  7. Lxr napisał(a):

    Szkoda :/
    Gdyby ktoś chciał skorzystać z tej zawartości pliku .htaccess to mimo hashy działa dopiero po usunięciu komentów :)
    Czy ścieżka do pliku z hasłami musi być bezwzględna, bo mam .htpasswd w tym samym katalogu co .htaccess i przy podaniu ścieżki względnej (samo: ".htpasswd") nie działa i po wpisaniu poprawnego loginu i hasła nie mogę wejść? A o ścieżkę bezwzględną dopiero zapytałem admina serwera i pewnie jeszcze trochę poczekam na odpowiedź.

  8. To i tak jest podobne do autoryzacji HTTP..

  9. jakby co to jest autoryzacja http :-)

  10. Aa, sry ;) Ale da sie jeszcze inaczej, w PHP jesli nie ma Apacha..

Dodaj komentarz