Zakamarki webmasteringu

Jeżeli nasza strona WWW znajduje się na serwerze Apache, zbiór .htaccess okazuje się nieoceniony w różnych sytuacjach. Pozwala on przede wszystkim kontrolować zachowanie gości odwiedzających strony internetowe. Za pomocą .htaccessa, do którego wpisano odpowiednie polecenia, da się wytyczyć choćby specjalne obszary zamknięte – na przykład takie, do których dostaną się wyłącznie osoby znające hasło. Można także określić, co ma robić serwer, kiedy dojdzie do jakiejś nietypowej sytuacji – jak na przykład nie uda się znaleźć któregoś pliku (popularny błąd “404”). Na kilku kolejnych stronach opowiem zatem, jak posługiwać się zbiorem .htaccess i co uda nam się dzięki niemu osiągnąć.

Zanim wklepiesz polecenia

Przed przystąpieniem do eksperymentowania zainteresujmy się, pod kontrolą jakiego oprogramowanie działa serwer WWW. Przede wszystkim musimy wiedzieć, że .htaccess jest przeznaczony dla serwerów Apache. Jeżeli korzystamy z jakiegoś innego oprogramowania, to pewne funkcje dostępne dzięki zbiorowi .htaccess mogą – ale wcale nie muszą – być dostępne.

Przyjmijmy jednak, że mamy do czynienia z Apache’em. Sprawdźmy teraz, czy w jego opcjach konfiguracyjnych włączono obsługę zbioru .htaccess. Często bowiem zdarza się tak, że co prawda mamy Apache’a, ale ze względów bezpieczeństwa zablokowano w nim możliwość korzystania z .htaccessa. I jeszcze jedna uwaga:

.htaccess

jest domyślną nazwą zbioru. Niewykluczone, że została ona zmieniona za pomocą dyrektywy AccessFileName. Przyjrzyjmy się więc opcjom konfiguracyjnym Apache’a, zapisanym w zbiorze httpd.conf .

Pamiętajmy wreszcie, że wszystkie mechanizmy uaktywniane dzięki .htaccessowi dotyczą folderu, w którym ów plik się znajduje. W niektórych przypadkach zakres jego działania rozciąga się również na podkatalogi – ale nigdy na foldery nadrzędne. Zbiór .htaccess odczytywany jest podczas każdego żądania związanego z dostępem do innych zbiorów zapisanych w danym katalogu. Wszystkie polecenia znajdują więc natychmiastowe odzwierciedlenie w zachowaniu się serwera.

Podobnie jak opisywany już w CHIP-ie plik robots.txt ,

.htaccess

jest typowym dokumentem tekstowym. Zwracam na to uwagę, ponieważ może się zdarzyć, że prześlemy zbiór na serwer, korzystając z jakiegoś klienta FTP. Dane trzeba transmitować w trybie tekstowym (ASCII), a niektóre klienty FTP domyślnie wysyłają wszystkie pliki w postaci binarnej.

Znaki i ograniczenia
Większość pól w pliku .htaccess powinna znajdować się w osobnych liniach. Separatorem kolejnych parametrów jest znak przejścia do nowej linii. Początkujący użytkownicy, którzy nieraz skarżą się, że któraś funkcja im nie działa, zapominają po prostu wprowadzić znak odstępu po każdej linii. Dotyczy to również ostatniego wiersza!
      Wymuszanie uwierzytelniania z wykorzystaniem pliku .htaccess jest bezpieczne, ale musimy zdawać sobie sprawę z tego, że działa ono tylko dla protokołu HTTP! Jeżeli użytkownik może uzyskać dostęp do jakiegoś folderu również za pomocą innego protokołu (np. FTP), to obecność w nim zbioru .htaccess nie wymusi podania loginu i hasła! W takim przypadku należy zabezpieczyć dostęp do katalogu za pomocą innej metody.

Zastanówmy się także nad ustawieniem odpowiednich uprawnień dostępu (polecenie chmod) do pliku .htaccess. Najlepiej ustalić je na

644

(

rw-r–r–

). Dzięki temu dostęp do zbioru będzie miał tylko serwer, a z poziomu przeglądarki WWW nie da się go zmodyfikować.

Dostęp do zasobów

Pliku .htaccess najczęściej używamy w celu ograniczenia dostępu do wybranych zbiorów. Pozwalamy je na przykład odczytywać tylko tym osobom, które znają login i hasło. Funkcja taka jest realizowana przez serwer, a zatem należy do najbardziej bezpiecznych – okazuje się o wiele pewniejsza niż autentyfikacja po stronie klienta. Zwróćmy uwagę, że opisywana metoda pozwala zabezpieczyć hasłem cały folder, w którym znajduje się plik .htaccess. Możemy także ograniczyć dostęp tylko do jednego, konkretnego zbioru (lub ich grupy), pozostałe pozostawiając niezabezpieczone.

Zanim włączymy taki mechanizm ochronny, trzeba przygotować plik zawierający listę użytkowników i odpowiadających im haseł. Przechowuje się je w zbiorze tekstowym, noszącym nazwę .htpasswd. Należy pamiętać, że hasła dla poszczególnych użytkowników są zakodowane za pomocą algorytmu MD5 (patrz: ramka “Hasła w pliku.htpasswd”).

Jeżeli korzystamy z generatora plików .htpasswd, to wynik jego działania zapisujemy w dokumencie tekstowym. Wysyłamy go na serwer WWW, uaktywniając oczywiście tryb ASCII i nadając zbiorowi nazwę .htpasswd. Kiedy natomiast używamy tylko kodera MD5, to w pliku .htpasswd wpisujemy niezakodowany login, znak dwukropka i zakodowane hasło. Każdą parę login-hasło umieszczamy w osobnej linii. Zawartość zbioru .htpasswd wygląda zatem mniej więcej tak:

chip:cd5DxdaZ8PtAw
chip1:xkssGKM908ff
chip2:dffuvcvcb8213

Hasła w pliku.htpasswd
Hasła użytkowników zapisuje się wraz z ich identyfikatorami (loginami) w pliku .htpasswd. Loginy są przedstawiane w postaci jawnej, hasła muszą być natomiast zakodowane z wykorzystaniem algorytmu MD5. Istnieje wiele sposobów uzyskania par jawny login-zakodowane hasło. Najprościej jest skorzystać z gotowych skryptów, które znajdziemy na stronach http://www.tools.dynamicdrive.com/password/ i http://www.gts.pl/main/index.php?strona=htacess.
      Jeśli ktoś jest programistą, może sobie niemalże “na kolanie” napisać najprostszy na świecie skrypt lub program szyfrujący. Biblioteki służące do kodowania łańcuchów tekstowych za pomocą algorytmu MD5 udostępnia praktycznie każdy język programowania.
      Do dyspozycji pozostają także “gotowce”. Twórcy serwera Apache przygotowali program htpasswd.exe, służący do generowania plików .htpasswd. Aplikację znajdziemy w Internecie za pomocą Google’a. Istnieje nawet odpowiednia animacja Flash, która potrafi kodować ciągi znaków za pomocą MD5.

Mamy już dokument .htpasswd. Teraz należy przygotować odpowiednie pola w zbiorze .htaccess, aby mechanizm logowania zadziałał. Oto najprostsze polecenia wymuszające podanie identyfikatora i hasła:

AuthName “Nazwa strony”
AuthType Basic
AuthUserFile /pass/.htpasswd
AuthGroupFile /dev/null
require valid-user

Pierwsza linia (AuthName) określa nazwę zastrzeżonego obszaru serwisu – na przykład Restricted Area. Wiersz drugi (

AuthType

) i czwarty (

AuthGroupFile

) pozostawiamy bez zmian. W trzeciej linii (

AuthUserFile

) podajemy ścieżkę dostępu do pliku .htpasswd. Koniecznie musi to być adres bezwzględny, zapisany od folderu nadrzędnego konta (serwera), np.:

/home/strona/public_html/pass/

.

Linijkę require valid-user wstawiamy jako piątą. Musi ona wyglądać właśnie tak jak w naszym przykładzie, jeżeli .htaccess ma “chronić” cały folder, w którym się znajduje. W przypadku gdy wymogiem uwierzytelniania chcemy objąć tylko jeden lub kilka plików, dla każdego z nich tworzymy trzylinijkowe grupy. Pierwsza z nich zawiera wpis <Files nazwapliku>, linia druga –

require valid-user

, trzecia zaś –

</Files>

, na przykład:

<Files test.html>
require valid-user
</Files>

Jeżeli nie popełniliśmy żadnych błędów, to po wywołaniu adresu strony internetowej i folderu, w którym umieszczono pliki .htaccess i

.htpasswd

, powinniśmy zobaczyć okienko logowania, takie jak na rysunku wyżej.

Kiedy użytkownik wprowadzi prawidłową parę login-hasło, serwer spróbuje wywołać dokument index.html w danym folderze. W przypadku błędnie podanego loginu lub hasła albo kliknięcia w wyświetlanym żądaniu przycisku Anuluj wyświetlony zostanie standardowy komunikat serwera o nieudanej próbie zalogowania się w serwisie. Jest to błąd numer 401 (wymagana autoryzacja).