310 likes | 451 Views
Administracja systemami operacyjnymi Wiosna 2014. Wykład 4 Autoryzacja w aplikacjach WWW. dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz. Cele autoryzacji na stronach WWW.
E N D
Administracja systemami operacyjnymiWiosna 2014 Wykład 4 Autoryzacja w aplikacjach WWW dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz
Cele autoryzacji na stronach WWW Ograniczenie dostępu do pewnych stron – tylko dla grupy uprawnionych użytkowników Rejestracja ruchu użytkowników Dostosowanie zawartości strony do preferencji użytkownika
Metody uwierzytelnia na stronach WWW Podstawowa metoda uwierzytelniania w przy użyciu plików .htaccess Rozszerzona metoda uwierzytelniania przy użyciu plików .htaccess Uwierzytelnianie z modułem mod_auth_mysql Uwierzytelnianie podstawowe w PHP Uwierzytelnianie z użyciem PHP, MySQL i mechanizmu sesji Uwierzytelnianie z użyciem SSL IIS – Integrated Windows Authentication Uwierzytelnianie z wykorzystaniem bazy LDAP
Uwierzytelnianie przez .htaccess Serwer Apache ma wbudowane funkcje kontroli dostępu. Najczęściej wykorzystywana jest kontrola na podstawie adresu IP klienta oraz według autentykacji podstawowej protokołu HTTP Wymagania konfiguracji serwera APACHE: LoadModuleauth_module/mod_auth.so AllowOverride All AccessFileName .htaccess
Uwierzytelnianie przez .htaccess Uwierzytelnianie można wprowadzić poprzez: • dokonanie zmian w plikach konfiguracyjnych Apache • dokonanie zmian w pliku htaccess lub httpd(pliki te będą znajdowały się w chronionym katalogu) Korzystanie z pliku .htaccess jest mniej efektywne od wykorzystania standardowych plików konfiguracyjnych, ponieważ jest on odczytywany za każdym żądaniem pliku z katalogu zawierającego plik .htaccess. Jednak jeżeli witryna jest umieszczona na dzierżawionym serwerze, nie mamy dostępu do jego plików konfiguracyjnych.
Okienko logowania Mozilla Firefox Internet Explorer Odmowa żądania
Ograniczenia dostępu do katalogu wyłącznie do wybranych adresów IP .htaccess Order Allow,Deny Allow from localhostAllow from 192.168.0.0/24 Allow from p.lodz.pl Powoduje ograniczenie dostępu do katalogu tylko lokalnej maszynie (127.0.0.1) oraz sieci wewnętrznej (np. 192.168.0.0/24) i domeny p.lodz.pl Opcja Order definiuje kolejność sprawdzania dyrektyw Allow i Deny. Allow,Deny komputery są domyślnie blokowane, a dyrektywy Deny są ważniejsze od Allow (tzn. Deny może zablokować maszynę z Allow). Natomiast dla Deny,Allow komputery domyślnie otrzymują dostęp, a Allow jest ważniejszy od Deny.
Tworzenie pliku z hasłami $ htpasswd -c hasla.txt user1New password: haslo Re-typenewpassword: haslo Addingpassword for user user1 $ htpasswdhasla user2New password: haslo2Re-typenewpassword: haslo2Addingpassword for user user2 hasla.txt user1:WvzodahMR9USk user2:YzASzTGEo2VMA
Plik .htaccess AuthName "Tajny zasób" AuthType Basic AuthUserFile/home/student1/hasla.txt Requireuser user1 <Filestajne.php tajne2.php> AuthName "Tajny zasób" AuthType Basic AuthUserFile/home/student1/hasla.txt Requirevalid-user </Files> Dyrektywa AuthName określa tekst monitu Dyrektywa Requireokreśla użytkowników, którzy będą mieli dostęp do podanej witryny Dyrektywa AuthUserFile zawiera ścieżkę do pliku z hasłami użytkowników
Tworzenie grup użytkowników Można wymienić wielu użytkowników w jednej dyrektywie Requireuser. Jednak w przypadku, gdy listy użytkowników za bardzo się rozrastają, warto użyć grup. Plik grup składa się z wierszy, które zawierają nazwę grupy, znak dwukropka i kolejno wymienione nazwy członków. grupy.txt userzy: user1 user2 .htaccess AuthName "Strefa chroniona" AuthType Basic AuthUserFile/home/student1/hasla.txt AuthGroupFile/home/student1/grupy.txt Require group userzy
Przykład zastosowania grup grupy.txt admins: przemek editors: kamil monika przemek webmasters: tomasz dorota wojtek przemek hasla.txt przemek:$apr1$ZU5.....$thDVsGbxOaIBMk1zAfjhr1 kamil:$apr1$fW5.....$t.dcYgk9gL/WM/XCdn3cA0 monika:$apr1$GX5.....$75/kolJSLGvLRL9su7K.h1 tomasz:$apr1$gC......$vsroOme7EtQhztYhBAAR81 dorota:$apr1$XD......$cj64qfBdE03fgbJlestSs/ wojtek:$apr1$sE......$ajKjhCQuYz/duYjDJV6Vu. grupa: editors grupa: webmasters grupa: admins
Cechy autoryzacji podstawowej w Apache • Wystarcza tylko jako proste uwierzytelnienie • Zapisywanie dodatkowych danych wymaga wprowadzenia dodatkowego systemu zapisu • Małe możliwości zarządzania użytkownikami • Konieczny dostęp do konfiguracji serwera – zależność od serwera • Wykorzystanie interfejsu przeglądarki • Wylogowanie następuje poprzez zamknięcie przeglądarki • Identyfikator i hasło są przesyłane w postaci jawnego tekstu
Rozszerzona metoda uwierzytelniania(digest access authentication) Wykorzystuje się w niej funkcje haszujące (MD5, SHA1), dzięki czemu identyfikatory i hasła przesyłane są do serwera w postaci zakodowanej, a nie jawnej. Większość popularnych przeglądarek internetowych obsługuje metodę rozszerzoną, potrafi haszować dane autentykacyjne. Wymagania konfiguracyjne serwera: Sprawdzić czy jest zainstalowany moduł: mod_auth_digest.so Tworzenie pliku haseł: Program htdigest [nazwa użytkownika]:[nazwa zasobu]:[zahaszowane hasło]
Rozszerzona metoda uwierzytelniania Format pliku .htaccess AuthDigestFile/home/wojtek/plik_hasel.txt AuthName "tajny_zasob" AuthTypeDigest Wszystkie inne właściwości tej metody uwierzytelniania są identyczne jak w przypadku metody podstawowej.
Uwierzytelnianie z modułem mod_auth_mysql Metoda podstawowa i rozszerzona: Baza danych Identyfikatory i hasła są przechowywane w plikach tekstowych Identyfikatory i hasła są przechowywane w bazie co daje: -możliwość zarządzania kontami; -umożliwienie jednoczesnego dostępu do haseł Doinstalować libapache2-mod-auth-mysql -przyspieszenie procesu uwierzytelniania -większe bezpieczeństwo dzięki dodatkowej warstwie separującej
Konfiguracja .htaccess lub httpd.conf AuthName "Test" AuthType Basic AuthUserFile /dev/nullAuthBasicAuthoritativeoff Auth_MySQL on Auth_MySQL_Authoritative on Auth_MySQL_DBauth Auth_MySQL_HostlocalhostAuth_MySQL_User rola1 Auth_MySQL_Passwordbardzo_tajne_hasloAuth_MySQL_Password_Tableauth_tableAuth_MySQL_Username_FielduserAuth_MySQL_Password_Field pass Auth_MySQL_Empty_PasswordsoffAuth_MySQL_Encryption_TypesMySQLrequirevalid-user Dostęp do bazy mysql Nazwy:- bazy,- tabeli z hasłami- opis kolumn tabeli Rodzaj haszowania hasła http://modauthmysql.sourceforge.net/CONFIGURE
Baza danych mysql> CREATE DATABASE auth; mysql>useauth; mysql> CREATE TABLE `auth`.`auth_table` ( `user` VARCHAR( 30 ) NOT NULL , `pass` VARCHAR( 50 ) NOT NULL , `user_group` CHAR( 10 ) NOT NULL , PRIMARY KEY ( `user` ) ) ENGINE = MYISAM ; mysql> GRANT allprivileges ON auth.auth_table TO rola1 IDENTIFIED BY 'bardzo_tajne_haslo'; mysql> insert intoauth.auth_tablevalues('wojtek', PASSWORD('wojtek'),'grupa');
Uwierzytelnianie podstawowe w PHP Pozwala szczegółowo kontrolować dostęp do zasobów Możliwość walidacji danych Możliwość monitorowania czynności podejmowanych przez użytkownika Jeśli brak jest dostępu do konfiguracji serwera jest to jedyne możliwe rozwiązanie Niezależność od platformy serwerowej i przenośność
Skrypt uwierzytelniający <?php $user=$_SERVER['PHP_AUTH_USER']; //pobr. id przesł. przez przegl. $password=$_SERVER['PHP_AUTH_PW']; // pobranie hasła // porównanie id i haseł - otrzymanych od użytkownika i // przechowywanych po stronie serwera (tutaj: hardcode) if($user!="przemek"||$password!="haslo1")// jeśli niepopr. { // wysłanie żądania uwierzytelnienia header('WWW-Authenticate: Basic realm="Chronionezasoby"'); header('HTTP/1.0 401 Unauthorized'); echo"<H4>[ Błąd 401! ]</H4>"; echo"<H3>Dostęp do zasobów wymaga uwierzytelnienia!</H3>"; } else {// uwierzytelnienie przebiegło poprawnie echo"<H4>[ Uwierzytelnienie przebiegło poprawnie ]</H4>"; echo"Właściwa część chronionej strony"; }?>
Uwierzytelnianie z użyciemPHP, MySQL i mechanizmu sesji Dostarczana funkcjonalność pozwala zapewnić bezpieczeństwo na bardzo wysokim poziomie. Umożliwia pełną identyfikację użytkownika i jego żądań w serwisie WWW. Kontrola sesji znacznie ułatwia uwierzytelnianie użytkowników – loginy i hasła przesyłane są przez użytkownika tylko jeden raz. Może być stosowana do śledzenia działań użytkowników czy zapamiętywania ich preferencji. Umożliwia realizację procesu wylogowania. Wygląd i działanie monitu logowania zależy nie od przeglądarki, ale od aplikacji WWW.
Skrypt uwierzytelniający index.php <? session_start(); $msg="Użytkownik niezalogowany.<br>Proszę się zalogować."; if(!empty($_POST['login'])&&!empty($_POST['password'])) { /* ewentualna walidacja pól formularza */ $db= @mysql_connect('localhost', $_POST['login'], $_POST['password']); if(!$db)$msg="Niepoprawny login lub hasło!"; else{// selekcja bazy danych @mysql_select_db('auth2', $db)ordie("Baza danych niedostępna."); // ustawienie zmiennej sesji dla użytkownika $_SESSION["id_".$_POST['login']]=$_POST['password']; // przekierowanie użytkownika do chronionej strony header("Location: authuser.php?id=".$_POST['login']); } } ?>
Skrypt uwierzytelniający authuser.php <? session_start(); if(isset($_SESSION["id_".$_GET['id']])) $usname="Użytkownikzalogowany jako [".$_GET['id']."]"; else { header("Refresh: 3; URL=index.php"); die("Musisz najpierw się zalogować!<br> Za chwilę zostaniesz przekierowany na stronę logowania..."); } ?> Aby wylogować się z serwisu wystarczy jedynie usunąć odpowiednią zmienną sesji z użyciem funkcji unset().
Autoryzacja przez PHPlib http://phplib.sourceforge.net/ http://doc.async.com.br/phplib/documentation.html PHPBaseLibrary – zestaw klas stanowiących elastyczną implementację obsługi : – sesji – autoryzacji – komunikacji z bazą danych • MySQL • PostgreSQL • mSQL • Oracle, Sybase • Microsoft SQL Server • ODBC
PHPlib – klasy bazowe • - DB_Sql - Page Management • - CT_Sql - CT_Split_Sql • - CT_Shm - CT_Dbm • - CT_Ldap - Session • - Auth - Perm • User
Autoryzacja PHPlib – cechy • autoryzacja sesji przez uwierzytelnienie użytkownika po stronie klienta • możliwość cofnięcia autoryzacji – wylogowania – koniec czasu ważności sesji • zastosowanie bazy danych • użycie formularzy logowania html • przeprowadzanie dla wybranej strony WWW • zintegrowanie ze schematem sprawdzania uprawnień użytkowników
Autoryzacja PHPlib – przygotowanie klas Połączenie z bazą danych, ustawienie parametrów interfejsu class MySqlDB extends DB_Sql { var $Host ="localhost"; var $Database = "auth_users"; var $User = "student"; var $Password = "pass"; }
PHPLib – przygotowanie klas class MySqlCt extends CT_Sql { var $classname = "MySqlCt"; var $database_table = "active_sessions"; var $database_class = "MySqlDB"; } klasa określająca parametry kontenera mysql> CREATE TABLE active_sessions ( sidvarchar(32) not null, namevarchar(32) not null, valtext, changedvarchar(14) not null, PRIMARY KEY (name, sid), KEY changed (changed) ); standardowa postać tabeli wymaganej przez mechanizm obsługi sesji w PHPlib
PHPLib – przygotowanie klas Klasa określająca parametry sesji class MySqlSession extends Session { var $classname = "MySqlSession"; var $mode = "cookie"; var $lifetime = 0; var $that_class = "MySqlCt"; var $allowcache_expire = 0; var $allowcache = "no"; }
PHPLib – przygotowanie klas Klasa definiująca parametry oraz sposób przeprowadzenia autoryzacji class MyAuth extends Auth{ var $classname = "MyAuth"; var $lifetime = 20; functionauth_loginform() { // wyświetlenie formularza logowania include( "./logform.inc" ); } function auth_validatelogin() { global $name, $password; $objDB = new MySqlDB; $query = sprintf("select id from users where (nick='%s') and (pass='%s')",$name,$password); $objDB->query( $query ); if ( $objDB->num_rows() > 0 ) return $name; else return false; } }//koniec klasy
Szkielet strony chronionej przez mechanizm autoryzacji PHPlib <? page_open( array( "sess" => "MySqlSession" "auth" => "MyAuth" ) ); ?> Chroniona zawartość strony <? page_close(); ?>
Schemat przeprowadzania autoryzacji wylogowanie, w dowolnej chwili przez wywołanie : $auth->logout();