Baza danych do przechowywania użytkowników

Podobne dokumenty
Rejestracja i Logowania - PHP/MySQL

Liczniki odwiedzin. Licznik odwiedzin na plikach

Aplikacje internetowe

Politechnika Częstochowska. Projektowanie systemów użytkowych II

Zajęcia 11 wykorzystanie MySQL w PHP

E.14 Bazy Danych cz. 19 SQL i PHP współpraca przez stronę internetową

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Wykład 5: PHP: praca z bazą danych MySQL

Języki programowania wysokiego poziomu. Ćwiczenia

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Aplikacje internetowe - laboratorium

Bazy danych w PHP dla początkujących

Wprowadzenie do Internetu Zajęcia 5

Zajęcia 13 wykorzystanie MySQL w PHP cz. 2

Aplikacje WWW - laboratorium

Języki programowania wysokiego poziomu. Blog

Projekt strony internetowej firmy organizującej przyjęcia

Języki programowania wysokiego poziomu. Forum

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

0.1 Logowanie do serwisu

4. Projekt Bazy Danych

Dokumentacja smsapi wersja 1.4

Technologie Internetowe Raport z wykonanego projektu Temat: Internetowy sklep elektroniczny

Internetowe bazy danych

Internetowe bazy danych

Język SQL, zajęcia nr 1

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Bazy danych i usługi sieciowe

Instalacja MySQL.

14. POZOSTAŁE CIEKAWE FUNKCJE

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Projektowanie systemów baz danych

Udostępnianie klientom zasobów serwera

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Połączenie Partnera z serwisem JustPay poprzez - METODĘ 2

Bazy danych. dr Radosław Matusik. radmat

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Bazy Danych i Usługi Sieciowe

Bezpieczeństwo Systemów Informacyjnych lab. 13

Podstawy technologii WWW

Obiektowe bazy danych

Podstawy programowania (PHP/Java)

Praca Magisterska "System zdalnego składania ofert kupna i sprzedaży za pośrednictwem Internetu" AUTOR PROMOTOR

Bazy danych. Polecenia SQL

6. Bezpieczeństwo przy współpracy z bazami danych

Udostępnianie klientom zasobów serwera

Wysyłanie pliku na serwer. Plik na serwerze.

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Współpraca PHP z MySql

Instrukcja Szkolnego Administratora Systemu Antyplagiatowego Plagiat.pl


Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

Dokumentacja serwisu internetowego Zespołu Szkół Technicznych w Radomiu.

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Wykład 05 Bazy danych

BAZA DANYCH SIECI HOTELI

Rejestracja Konta w EGO PAY

Umieszczanie kodu. kod skryptu

Wdrożenie modułu płatności eservice. dla systemu Magento

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

11. PROFESJONALNE ZABEZPIECZENIE HASŁEM

Dokumentacja SQL API 1

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8.

TABUN_CMS. System zarządzania treścią dla dedykowanej grupy użytkowników. Tabun_CMS 2008 Marcin Biegun, Szymon Bąk

Aplikacje www laboratorium

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Połączenie Partnera z serwisem JustPay poprzez - METODĘ 1 (paczki kodów)

Dane - pobieranie, przekazywanie i przechowywanie. dr Beata Kuźmińska-Sołśnia

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Struktura drzewa w MySQL. Michał Tyszczenko

MVC w praktyce tworzymy system artykułów. cz. 2

Instrukcja obsługi Uczeń. Spis Treści

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Aplikacje WWW - laboratorium

Bazy Danych i Usługi Sieciowe

Wyzwalacze (triggery) Przykład

Wykład 5. SQL praca z tabelami 2

Zajęcia 10 obsługa formularzy w PHP

Projektowani Systemów Inf.

Podstawowe wykorzystanie Hibernate

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Współpraca PHP z MySql cz.2

Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka

Aby skorzystać z wyżej wymienionych funkcji zaloguj się na swoje konto w e-dok zgodnie z opisanymi poniżej 7 krokami:

Relacyjne bazy danych. Podstawy SQL

Obowiązuje od wersji

Platforma e-learningowa

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań,

INSTRUKCJA Systemu Antyplagiatowego dla Szkół Antyściąga.pl dla Nauczyciela

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Transkrypt:

System logowania i rejestracji jest bardzo przydatną funkcjonalnością na każdej stronie. Umożliwia sprawną identyfikację i zarządzanie użytkownikami. Strona ze skryptem logowania nabiera dużej wartości. Zarejestrowani użytkownicy mogą się komunikować, tworzą swoją odrębną społeczność. Często zwiększa to zainteresowania stroną i ruch na niej. Konta mogą mieć dużo funkcjonalności takich jak dodawanie zdjęć, system komentarzy czy ankiety. Baza danych do przechowywania użytkowników Informacje dotyczące kont użytkowników najlepiej przechowywać w bazie MySQL. Na prawdę nie warto bawić się w pliki tekstowe pisząc tak rozbudowane skrypty. Tabela będzie przechowywać podstawowe informacje takie jak id, login, hasło, email, data rejestracji, data logowania oraz adres IP. 1 CREATE TABLE IF NOT EXISTS `uzytkownicy` ( `id` int() NOT NULL AUTO_INCREMENT, `login` varchar() NOT NULL, `haslo` varchar() NOT NULL, `email` varchar() NOT NULL, `rejestracja` int() NOT NULL, `logowanie` int() NOT NULL, `ip` varchar(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf AUTO_INCREMENT=1; Posiadając bazę danych proponuję od razu dodać do niej pierwszego użytkownika administratora. Dzięki temu od razu będziemy widzieć efekty pracy. Dane logowania to: Login: admin Hasło: haslo Hasło będziemy przechowywać w bazie danych w postaci zakodowanego ciągu MD. Dzięki temu w razie włamania do serwisu, włamywacz nie będzie posiadał listy haseł, a jedynie ich zakodowane odpowiedniki. Podczas logowania hasło wpisane przez użytkownika także jest od razu kodowane i porównywane z wartością z bazy. Uwaga! Warto wspomnieć, że w obecnych czasach kodowanie MD jest bardzo łatwe do złamania (mimo że jest to kodowanie jednostronne). Z tego powodu, pisząc bezpieczny Karol Trybulec p-programowanie.pl 1

skrypt należy skorzystać z innej funkcji szyfrującej hasła niż MD. Dobrym i często stosowanym rozwiązaniem jest także użycie soli (z ang. salt). Polega to na szyfrowaniu haseł poddanych jakiejś transformacji tekstu. Dodajmy konto administratora do bazy danych: INSERT INTO `uzytkownicy` (`id`, `login`, `haslo`, `email`, `rejestracja`, `logowanie`, 1 `ip`) VALUES (1, 'admin', '00ccbfebddadca00cea', 'admin@admin.pl', '1000', '1000', '1.0.0.1'); Formularz HTML rejestracji użytkownika Formularz rejestracji ma za zadanie pobrać od użytkownika niezbędne dane wymagane do utworzenia konta. Dane zostaną wysłane do skryptu PHP metodą POST po kliknięciu w przycisk. Formularz znajduje się w pliku rejestracja.php. 1 <form method="post" action="rejestracja.php"> <b>login:</b> <input type="text" name="login"><br><br> <b>hasło:</b> <input type="password" name="haslo1"><br> <b>powtórz hasło:</b> <input type="password" name="haslo"><br><br> <b>email:</b> <input type="text" name="email"><br> <input type="submit" value="utwórz konto" name="rejestruj"> </form> Skrypt rejestracji PHP Skrypt dopisujmy do tego samego pliku co formularz. Przed utworzeniem konta, w skrypcie należy wykonać poniższe kroki: 1..... Połączyć się z bazą MySQL Pobrać i przefiltrować dane formularza z tablicy super globalnej $_POST. Sprawdzić czy login nie jest zajęty. Zapisać w bazie danych. Zamknąć połączenie MySQL. Zawsze przed zapisem jakichkolwiek danych do bazy danych, należy odpowiednio przygotować zapisywaną zmienną. Inaczej skrypt będzie źle zabezpieczony. Ataki SQL Injection to ciągle jedne z najczęstszych ataków. Ja utworzyłem specjalną funkcję, która zabezpiecza dane pochodzące od użytkownika: Karol Trybulec p-programowanie.pl

1 1 1 1 1 1 1 1 1 0 1 0 1 mysql_connect("localhost","admin","haslo"); mysql_select_db("baza"); function filtruj($zmienna) if(get_magic_quotes_gpc()) $zmienna = stripslashes($zmienna); // usuwamy slashe // usuwamy spacje, tagi html oraz niebezpieczne znaki return mysql_real_escape_string(htmlspecialchars(trim($zmienna))); if (isset($_post['rejestruj'])) $login = filtruj($_post['login']); $haslo1 = filtruj($_post['haslo1']); $haslo = filtruj($_post['haslo']); $email = filtruj($_post['email']); $ip = filtruj($_server['remote_addr']); // sprawdzamy czy login nie jest już w bazie if (mysql_num_rows(mysql_query("select login FROM uzytkownicy WHERE login = '".$login."';")) == ) if ($haslo1 == $haslo) // sprawdzamy czy hasła takie same mysql_query("insert INTO `uzytkownicy` (`login`, `haslo`, `email`, `rejestracja`, `logowanie`, `ip`) VALUES ('".$login."', '".md($haslo1)."', '".$email."', '".time()."', '".time()."', '".$ip."');"); echo "Konto zostało utworzone!"; else echo "Hasła nie są takie same"; else echo "Podany login jest już zajęty."; Formularz HTML logowania użytkownika Mając gotową rejestrację i strukturę bazy danych, można wziąć się za skrypt logowania. Będzie w nim wymagane użycie sesji. Sesje startuje się na samym początku dokumentu, jeszcze przed kodem HTML. Podobnie jak przy rejestracji, dane są przesyłane do bazy metodą POST. Warto dodać też połączenie z bazą danych na górze dokumentu, tam gdzie Karol Trybulec p-programowanie.pl

startujemy sesję. Nazwa pliku to logowanie.php. 1 session_start(); mysql_connect("localhost","admin","haslo"); mysql_select_db("baza"); <form method="post" action="logowanie.php"> <b>login:</b> <input type="text" name="login"><br> <b>hasło:</b> <input type="password" name="haslo"><br> <input type="submit" value="zaloguj" name="loguj"> </form> Skrypt PHP odpowiedzialny za logowanie umieścimy w tym samym pliku co formularz. Logując się filtrujemy dane. Następnie sprawdzamy czy określony login i hasło występują w bazie, jeżeli tak logujemy użytkownika. W momencie logowania należy uaktualnić informacje o użytkowniku czyli datę logowania oraz aktualny adres IP. 1 1 1 1 1 1 1 1 1 0 1 0 1 function filtruj($zmienna) if(get_magic_quotes_gpc()) $zmienna = stripslashes($zmienna); // usuwamy slashe // usuwamy spacje, tagi html oraz niebezpieczne znaki return mysql_real_escape_string(htmlspecialchars(trim($zmienna))); if (isset($_post['loguj'])) $login = filtruj($_post['login']); $haslo = filtruj($_post['haslo']); $ip = filtruj($_server['remote_addr']); // sprawdzamy czy login i hasło są dobre if (mysql_num_rows(mysql_query("select login, haslo FROM uzytkownicy WHERE login = '".$login."' AND haslo = '".md($haslo)."';")) > ) // uaktualniamy date logowania oraz ip mysql_query("update `uzytkownicy` SET (`logowanie` = '".time().", `ip` = '".$ip."'') WHERE login = '".$login."';"); $_SESSION['zalogowany'] = true; $_SESSION['login'] = $login; // zalogowany else echo "Wpisano złe dane."; Karol Trybulec p-programowanie.pl

Uwagi na koniec Skrypt jest okrojony. Nie ma sensu ubierać go w bajery ponieważ jest on napisany do celów naukowych. Starałem się napisać jak najkrótszy kod, który będzie w stanie rejestrować/logować oraz który będzie miał jakiekolwiek zabezpieczenia. W internecie można znaleźć wiele długich gotowców z wieloma funkcjami, ale nie tędy droga. 0 stron a przeplatanych kodem HTML trudno jest zrozumieć i przyswoić, a kopiować takich rzeczy nie ma sensu jeżeli chcesz kopiować to przerzuć się na gotowy system CMS. Jeżeli chcesz wykorzystać ten skrypt u siebie musisz go ulepszyć. Skrypty PHP trzyma się w osobnych plikach a formularze w osobnych. To samo dotyczy obsługi połączenia z bazą danych. Dodatkowo trzeba bezwzględnie sprawdzać długość wprowadzanych danych! Zabezpieczyć je zarówno od strony HTML ograniczając długość pół formularzy, ale przede wszystkim od strony PHP (funkcja strlen). Cały skrypt jest dostępny do pobrania na samym dole strony. Jest w nim kompletna rejestracja i logowanie. Po zalogowaniu wyświetla się powitanie i możliwość wylogowania. W tym artykule fragmentu kodu odpowiedzialnego za moment po zalogowaniu i wylogowanie nie umieściłem, ponieważ niepotrzebnie by wszystko skomplikował (a jest bardzo prosty). Podczas testowania skryptu zacznij od utworzenia bazy danych. Kompletny działający skrypt logowania i rejestracji możesz pobrać klikając w link: http://p-programowanie.pl/pliki/logowanie.rar Karol Trybulec p-programowanie.pl