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.

Podobne dokumenty