Internetowe repozytorium plików z autoryzacją użytkownika
Transkrypt
Internetowe repozytorium plików z autoryzacją użytkownika
Projekt z Technologii Internetowych Internetowe repozytorium plików z autoryzacją użytkownika Ti 2, sekcja 1, podsekcja 1 Adrian Łęgowski Dawid Ważny Wśród studentów często istnieje konieczność wymiany niedużych plików pdf, bądź nieco większych archiwów z programami napisanymi w ramach zajęć laboratoryjnych lub też wykresów(np. Matlabowskich), które przy odpowiedniej dokładności mogą zajmować nawet powyżej 100MB. Przedstawiany tutaj program ma za zadanie całkowicie wykluczyć pośredników w wymianie plików(np. Rapidshare, megaupload). Oferowane funkcjonalności pozwalają na wymianę zarówno nieograniczenie dużych jak i bardzo małych plików. Podstawową zaletą skryptu jest prosty torrent tracker, który działa w sposób zautomatyzowany. Do prawidłowego działania niezbędny jest tylko jego adres, a pozostałymi czynnościami zajmują się mechanizmy wbudowane w odpowiednią klasę. Wymiana plików przez HTTP jest chroniona systemem autoryzacji użytkowników połączonym z systemem uprawnień. Program oferuje dwa poziomy użytkowników(Gość, Zarejestrowany) oraz możliwość ukrycia plików dla poszczególnych użytkowników. Każdy plik w repozytorium można opisać w sposób dowolny. 1. Funkcje programu Rejestracja użytkowników: skrypt pozwala na dodawanie użytkowników poprzez odpowiedni formularz. Aby możliwa była rejestracja nowego użytkownika niezbędne jest wysłanie tzw. zaproszenia na odpowiedni adres email. Logowanie(autoryzacja użytkownika): każdy zarejestrowany użytkownik posiada możliwość zalogowania się do systemu za pomocą wcześniej podanego hasła i identyfikatora(loginu). Niezarejestrowani użytkownicy mogą zalogować się na konto „Gość”, które posiada ograniczone prawa – nie może w żaden sposób ingerować w zawartość folderów. Usuwanie użytkownika: usuwanie użytkownika odbywa się poprzez głosowanie pozostałych użytkowników. Zapraszanie użytkowników: każdy zarejestrowany użytkownik ma prawo zaprosić nowego użytkownika. Edycja profilu: każdy zarejestrowany użytkownik może zmienić dane w swoim profilu. Tworzenie plików: zalogowany(nie na konto gościa) użytkownik może stworzyć plik o dowolnej treści z jednym z trzech rozszerzeń. Te rozszerzenia to php, txt, html. Usuwanie plików: zalogowany(nie na kontro gościa) użytkownik może usunąć dowolny plik. Generowanie linków jednorazowych: każdy zarejestrowany i zalogowany użytkownik może wygenerować jednorazowy odnośnik do dowolnego pliku. Tworzenie folderów: zalogowany(nie na konto gościa) użytkownik może stworzyć folder o dowolnej(spośród dozwolonych przez systemu uniksowe) nazwie i opisie. Pobieranie plików: użytkownicy mają możliwość pobierania plików zarówno przez stronę internetową jak i protokół p2p. 2. Instrukcja użytkownika I. Wymagania Aby poprawnie uruchomić skrypt niezbędny jest serwer z obsługą php w wersji 5. Bardzo istotnym jest, aby serwer nie działał w trybie tzw. „safe mode”. Dobrym zwyczajem jest zadbanie o to, aby opcja „register globals” była wyłączona, to może utrudnić ewentualne uszkodzenie skryptu. II. Instalacja Aby zainstalować skrypt, należy wgrać pliki na wybrany serwer i ustawić uprawnienia następujących plików i folderów: wszystkie pliki *.php muszą mieć możliwość zapisu i odczytu(najlepiej chmod 644), foldery „votes”, „files”, „O_links”, „cache”, „sessions”, „trackerDB”, „1q2w3e4r5t6y7u8i9o0z9a8s6f6g5h6” muszą być zapisywalne(najlepiej chmod 644). Konieczna może się okazać konfiguracja plików .htaccess, jeśli pliki dostarczone wraz ze skryptem nie działają, należy skontaktować się z administratorem lub odwołać się do dokumentacji serwera. Po zainstalowaniu skrypt jest gotowy do działania. Zarejestrowany jest jeden użytkownik: Login: Admin Hasło: Admin Należy zwrócić uwagę na wielkie litery. III.Plik konfiguracyjny Plik konfiguracyjny(cfg.php) jest zbudowany według schematu: nazwaZmiennej=wartość#komentarz Domyślnie plik konfiguracyjny jest wypełniony komentarzami, aby ułatwić zrozumienie jego treści. Należy pamiętać, że wszelkie ścieżki do plików i folderów powinny być adresowane bezwzględnie, tzn. wg schematu: ./folder1/folder2/plik IV. Rejestracja Rejestracja użytkownika odbywa się poprzez formularz w pliku register.php Aby się zarejestrować, należy wypełnić wszystkie pola oznaczone gwiazdką „*”. Pole „Imię i nazwisko” jest opcjonalne. Rejestracja jest możliwa tylko po otrzymaniu zaproszenia. W polu „Adres e-mail” należy wpisać adres, na który zostało wysłane zaproszenie. V. Logowanie Aby się zalogować, należy wprowadzić identyfikator(login) i hasło podane przy rejestracji, a następnie kliknąć „Zaloguj" Aby zalogować się na konto gościa, należy kliknąć w odnośnik „Zaloguj jako gość”. Formularz logowania jest widoczny tylko dla niezalogowanych użytkowników. VI. Odzyskiwanie hasła Aby odzyskać(wygenerować) hasło, należy kliknąć w odnośnik „Zapomniałem hasła” w formularzu logowania i wpisać swój identyfikator(login). Nowe hasło zostanie wysłane na adres email przypisany do tego identyfikatora. Należy zwrócić uwagę, że wygenerowane hasło jest długie, a jego kopiowanie często jest nieskuteczne, ponieważ najczęściej kopiowany jest także ostatni biały znak. Aby mieć pewność, że hasło zostało poprawnie skopiowane należy(w systemie Windows) kliknąć dwukrotnie na haśle i z menu podręcznego wybrać opcję „kopiuj”. VII. Edycja danych w profilu W zakładce „profil” dostępnej ze strony głównej można zmodyfikować swoje dane. Obowiązkowe są tylko pola oznaczone gwiazdką „*”. VIII. Przeglądanie zawartości folderów Zalogowany użytkownik ma możliwość przeglądania folderów i ściągania plików. Użytkownicy zarejestrowani i zalogowani mogą usuwać pliki oraz generować odnośniki do nich. Aby wygenerować odnośnik do pliku, należy kliknąć w „Generuj link”. Aby usunąć plik, należy kliknąć w „Usuń plik”, następni potwierdzić chęć usunięcia danego pliku. Zawartość poszczególnych kolumn reprezentuje kolejno: Typ – rozróżniane są dwa podstawowe typy: folder, plik. Typ plik dzieli się na kilka rozpoznawanych typów plików(np. rar, pdf, exe). Istnieje możliwość sortowania wg podstawowych typów(folder/plik). Reprezentacja odbywa się w postaci obrazków. Nazwa – reprezentuje nazwę pliku lub jego nazwę zastępczą. Pod nazwą może się znajdować opis pliku/folderu. Typ – typ elementu reprezentowany tekstowo Rozmiar - reprezentowany liczbowo rozmiar pliku lub folderu. W przypadku pliku jest to wprost jego rozmiar, jednak w przypadku folderu jest to suma rozmiarów wszystkich plików znajdujących się wewnątrz. Akcje – kolumna zawiera akcje możliwe do wykonania na zadanym elemencie. IX. Wgrywanie pliku Aby wgrać plik, należy kliknąć w „Upload” na stronie folderu, do którego chcesz dodać plik. Jedyne obowiązkowe pole to pole „uploaduj” reprezentujące adres wgrywanego pliku na dysku lokalnym. Pole „nazwa zastępcza” reprezentuje nazwę, która będzie wyświetlana podczas przeglądania plików. Pozostawienie pustego pola zaowocuje wypisaniem prawdziwej nazwy pliku. X. Tworzenie nowego folderu Aby stworzyć nowy folder, należy kliknąć w „Nowy folder” na stronie folderu, w którym chcesz utworzyć pod-folder. Obowiązkowe pole „prawdziwa nazwa” reprezentuje rzeczywistą nazwę folderu na dysku serwera. Pole „nazwa zastępcza” reprezentuje wyświetlaną nazwę podczas przeglądania folderu nadrzędnego. XI. Tworzenie nowego pliku Aby stworzyć nowy plik, należy kliknąć w „Nowy plik” na stronie folderu, w którym chcesz umieścić nowy plik. Obowiązkowe pole „prawdziwa nazwa” reprezentuje rzeczywistą nazwę folderu na dysku serwera. Pole „nazwa zastępcza” reprezentuje wyświetlaną nazwę podczas przeglądania folderu nadrzędnego. Pole „treść pliku” reprezentuje zawartość pliku, która zostanie zapisana. Może to być dowolna treść. XII. Usuwanie folderów Usuwanie folderów jest możliwe tylko poprzez bezpośredni dostęp do plików/folderów z poziomu ftp. XII. Zapraszanie użytkowników Aby zaprosić użytkownika, należy kliknąć w „Zaproś kogoś” w menu dolnym, a następnie wpisać adres email osoby zapraszanej. XIII.Usuwanie użytkownika Usuwanie użytkownika odbywa się poprzez głosowanie pozostałych użytkowników. Aby usunąć danego użytkownika potrzeba n-1 głosów, gdzie „n” oznacza aktualną liczbę zarejestrowanych użytkowników. 3. Wybrane zrzuty ekranowe Rys. 1 Okno logowania Rys. 2 Komunikat o braku uprawnień Rys. 3 Wygenerowany link jednorazowy 4. Wykorzystane technologie Do budowy przedstawianego skryptu wykorzystano język skryptowy php5 do generowania dynamicznej zawartości i operacji na plikach. Zastosowano tę wersję php, ponieważ oferuje ona pełne programowanie obiektowe, co pozwala na przyśpieszenie prac nad rozszerzeniami skryptu. Pewną alternatywą dla php jest jest ASP i perl, jednak z powodu znacznego wsparcia społeczności wybór padł na php5. Do tworzenia warstwy prezentacji wykorzystano XHTML 1.0(strict), ponieważ takie podejście zapewnia zgodność z przeglądarkami, które dopiero mają nadejść. Wybrane fragmenty kodu: $globals = new Globals(); $globals->registerAll( COOKIE ); $globals->register( new GET('dir', hexadecimal) ); $globals->register( new GET('sortby', integer) ); $globals->register( new GET('sort', integer) ); $globals->checkUnregistered(); Powyższy fragment kodu pochodzi z pliku index.php i przedstawia sposób rejestrowania zmiennych w skrypcie. Po wykonaniu tego kodu w skrypcie można używać zmiennych COOKIE w każdej postaci, zaś zmiennych GET o indeksach tylko wyżej wymienionych. Następuje automatyczne rzutowanie typów i czyszczenie zawartości zmiennych tak, aby nie były zagrożeniem dla skryptu. Typ „hexadecimal” jest typem zadeklarowanym przez skrypt, a nie właściwością języka. Options -Indexes RewriteEngine On RewriteCond %{HTTP_COOKIE} !^.*2921c27703d2384a72771fa2a412afc3.*$ [NC] RewriteRule .* http://www.baranie.webd.pl/download/notAllowed.php [NC,L] Powyższy fragment przedstawia treść pliku .htaccess blokującego dostęp do plików i folderów. Nazwa ciasteczka w późniejszych wersjach programu będzie generowana okresowo. 5.Napotkane problemy Podstawowym problemem aplikacji internetowych jest brak odporności na ataki hakerskie. W prezentowanym skrypcie zdecydowano, że najlepszym rozwiązaniem będzie wstępne filtrowanie używanych zmiennych oraz ich rejestracja. W przypadku pojawienia się zmiennej niezarejestrowanej skrypt powinien kończyć działanie i wyświetlać komunikat o nieprawidłowym zapytaniu. Najtrudniejszym zadaniem okazało się zaprojektowanie pliku download.php. Aby utrudnić dostęp do plików osobom nieupoważnionym zdecydowano się na kontrolowanie zawartości ciasteczek. Serwer sprawdza, czy ciasteczko o zadanej nazwie istnieje w pamięci użytkownika. Takie podejście nie jest oczywiście całkowicie bezpieczne, jednak losowa generacja nazwy ciasteczka poważnie utrudni ewentualne włamanie.