Autoryzacja BASIC w php-fcgi

Autoryzacja podstawowa HTTP, wg większości tutoriali dostępnych w necie, jest z poziomu PHP trywialna. Wystarczy sprawdzić zawartość zmiennych $_SERVER['PHP_AUTH_USER'] i $_SERVER['PHP_AUTH_PW'] i w razie potrzeby wysyłać cyklicznie nagłówek HTTP 401 - Unauthorized.

W przypadku, gdy PHP działa jako moduł serwera Apache (mod_php), wszystko znakomicie działa. Problem robi się wtedy, gdy nasz provider stawia na (swoje) bezpieczeństwo i PHP uruchamia w trybie CGI/FastCGI.

Może nas czekać wtedy dosyć niemiła niespodzianka - wspomniane wcześniej zmienne… mogą nie istnieć, a raczej nie być widoczne w skryptach PHP.

Rozwiązania tego problemu mogą być dwa: albo męczenie swojego usługodawcy, aby postarał się o przenoszenie nagłówków HTTP Authorization do parsera PHP, albo też zastosowanie pewnego triku. Wymagana do tego będzie jedynie obsługa i możliwość konfiguracji przez użytkownika modułu mod_rewrite.

Do pliku .htaccess dopisujemy następujące linijki:

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

Do pliku PHP, w którym wykonujemy autoryzację, na samym początku dopisujemy:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

Dalej już należy postępować zgodnie z dostępnymi kursami.

 

Comments

No comments so far.

Leave a Reply

 
(will not be published)
 
 
Comment