Wydział Elektryczny
Instytut Automatyki i Inżynierii Informatycznej
System zarządzania katalogiem produktów sklepu modelarskiego
Dokumentacja techniczna
Projekt realizowany w ramach zajęć z przedmiotu:
Programowanie w Sieci WWW
Prowadzący zajęcia:
mgr Michał Apolinarski
Informatyka, specjalizacja Bezpieczeństwo Systemów Informatycznych
Semestr VII, rok akademicki: 2011/2012
Kamil Cieśla 88344
Andrzej Dubiel 88347
Spis Treści
Zrealizowane części projektu 3
Zgodnie z założeniami projektu, strona internetowego Sklepu Modelarskiego jest wykonana w technologii PHP wraz z wykorzystaniem relacyjnej bazy danych MySQL.
Strona została utworzona w oparciu o wzorzec MVC (Model - View - Controler), który znacznie ułatwia programowanie (w tym wprowadzanie zmian/poprawek) oraz sprawia, że kod jest nadzwyczaj przejrzysty oraz poukładany. W osobnych plikach znajdują się funkcje odpowiedzialne za komunikowanie się z bazą danych (PHP+SQL), funkcje kontrolujące i przygotowujące (obrabiające) treść przed jej wyświetleniem (PHP) oraz funkcje odpowiedzialne za prezentowanie treści użytkownikowi (PHP+HTML).
Poniżej znajduje się schemat prezentujący działanie wzorca MVC:
W aktualnej wersji projektu zaimplementowane zostały następujące funkcjonalności:
wyświetlanie kategorii produktów (rekurencyjne zagnieżdżanie kategorii),
prezentowanie listy produktów użytkownikowi,
moduł logowania/wylogowywania,
prezentowanie informacji o pojedynczym produkcie,
"koszyk" - wraz z możliwością dostosowywania liczby sztuk danego produktu, usuwania produktów z koszyka, podliczaniem kosztu zakupu żądanej liczby sztuk danego produktu oraz sumaryczny koszt całej zawartości koszyka,
składanie zamówienia - w tym podanie formy płatności i sposobu dostawy.
Kategorie produktów zostały zrealizowane w sposób hierarchiczny (jedne kategorie mogą znajdować się wewnątrz drugich tworząc drzewo kategorii). W bazie danych odpowiada za to atrybut 'parent_id' - gdy atrybut ten posiada wartość 'null' oznacza, że jest jedną z kategorii głównych. Jeśli wartość atrybutu 'parent_id' jednej kategorii jest równa kluczowi 'id' drugiej kategorii, oznacza to, że ta pierwsza jest dzieckiem tej drugiej. Nie ma ustalonego ograniczenia co do liczby potomków kategorii.
Za przygotowanie drzewa kategorii odpowiedzialna jest funkcja 'kategoria', która przyjmuje parametr ID, a zwraca drzewo kategorii w postaci: a) przodkowie wybranej kategorii (jeśli posiada), b) dzieci (nie potomkowie) wybranej kategorii (jeśli posiada).
W ten sposób utworzone drzewo jest przekazywane do funkcji 'prepareHTML', która wywołuje rekurencyjną funkcję 'categories', w której przygotowywany jest cały kod HTML odpowiedzialny za wyświetlenie kategorii użytkownikowi.
Funkcja 'kategoria' przed odwołaniem się do bazy danych sprawdza czy podany parametr jest liczbą oraz czy jest prawidłowym identyfikatorem obiektu klasy kategoria. W przypadku podania nieprawidłowych danych (np. tekst, kod html czy sql) funkcja przerwie swoje działanie.
Za wyświetlenie informacji o produkcie odpowiedzialna jest funkcja 'produkt', która przyjmuje parametr ID, a zwraca wszystkie dostępne w bazie danych informacje na temat danego produktu (łącznie z informacjami z innych tabel bazy danych, np. typ silnika, kategoria do której należy itp.).
Przed wywołaniem zapytania do bazy danych funkcja sprawdza czy podany parametr jest liczbą oraz czy jest prawidłowym identyfikatorem obiektu klasy 'produkt'.
Za wszystkie czynności związane z 'koszykiem' odpowiedzialna jest funkcja 'koszyk', która może przyjąć od 0 do 2 parametrów. W przypadku wywołania bez parametrów funkcja wyświetli produkty znajdujące się w koszyku zalogowanego użytkownika.
Gdy funkcja zostanie wywołana z tylko pierwszym parametrem (ID - identyfikator produktu), do koszyka zostanie dodany produkt o podanym ID. Przed wywołaniem zapytania do bazy danych funkcja sprawdza czy podany parametr jest liczbą oraz czy jest prawidłowym identyfikatorem obiektu klasy 'produkt'.
Funkcja wywołana z parametrami ID oraz USUŃ spowoduje usunięcie z koszyka produktu o identyfikatorze równym pierwszemu parametrowi. Jeśli w koszyku nie będzie znajdował się produkt o zadanym ID, funkcja przerwie swoje działanie.
Funkcja 'zamowienie' odpowiada za składanie zamówień. Po sprawdzeniu czy użytkownik jest zalogowany oraz czy w koszyku znajdują się produkty, generowany jest formularz zamówienia, w którym użytkownik musi podać adres dostawy, formę płatności oraz sposób dostawy. Dwa ostatnie elementy są listami wyboru. Po wysłaniu formularza do serwera pola adresu dostawy (m.in. miasto, ulica, kod pocztowy) przechodzą szczegółową walidację (wykorzystanie wbudowanej w PHP funkcji preg_match). Formularz jest odporny na próby wprowadzenia tagów HTML, XML czy SQL Injection. Do bazy danych zostaną wysłane tylko prawidłowe dane, które nie będą mogły jej uszkodzić.
Formularz logowania po wysłaniu do serwera przechodzi szczegółową walidację po to, aby nie można było wykonać ataku typu SQL Injection.
Hasła użytkowników są zabezpieczone w bazie danych dzięki wykorzystaniu funkcji skrótu SHA wspartej przez tzw. sól.
Aplikacja została zaimplementowana w popularnym wzorcu MVC, któremu zawdzięcza przejrzystość i poukładanie kodu.
Wszystkie parametry wywołania funkcji są odpowiednio walidowane przed przystąpieniem do głównego działania funkcji, dzięki czemu strona odporna jest na próby zmuszenia jej do nieprawidłowego działania.
Wszystkie pola formularzy przechodzą walidację przed dodaniem danych do bazy, co sprawia, że aplikacja jest odporna na ataki typu SQL Injection.