Mam kilka pytan w zwiazku z bezpieczenstwem......
Co tu jeszcze dodac by skrypt byl bezpieczny ?
0)
LOGOWANIE UZYTKOWNIKA W SYSTEMIE
SCHEMAT DZIALANIA:
1) wyszukaj login w bazie "SELECT user_password, user_id FROM ".$prefix_table."_users WHERE user_login='$username'";
2)
HASLO W BAZIE MOZE BYĆ ZAKODOWANE ALBO HASLO W BAZIE NIE ZAKODOWANE (pod jednym warunkiem,że je wpiszemy bezposrednio do bazy)
Jezeli haslo jest nie zakodowane i user się loguje to musimy je szybko zakodowac.....

Czyli zaraz przy pierwszym logowaniu haslo kodujemy md5
3)
$dbpass - hasło w bazie (md5)
$md5_pass - haslo podane przy logowaniu
$nowtime = time(); - aktualny czas
$ip, $ip_addres = $_SERVER['REMOTE_ADDR']; - ip z ktorego sie logujemy
4)
Mamy 2 hasla jedno w bazie ( zakodowane) oraz haslo z logowania (nie zakodowane)
hasło w bazie jest zakodowane md5 wiec trzeba zakodowac haslo podane przy logowaniu($user_password) a nastepnie porównac
jezeli login w bazie i z formularza się zgadza oraz haslo w bazie i w formularzu się zgadza to tworzymy ciasteczko
Czy dołożyć tutaj jeszcze warunek BY IP byly zgodne np. Admin ?
5)
ciasteczko zawiera id, login, haslo
docookie($dane_z_bazy[user_id], $username, $md5_pass);
czy jest bezpieczne przechowywać haslo w ciasteczku ?
6)
Schemat dzialania (logowania do SYSTEMU)
Funkcja login TWORZY SESJE
a) USUN STARA SESJE na podstawie naszego loginu "DELETE FROM ".$prefix_table."_session WHERE uname='$uname' AND status='1'"


c) ZAPISZ NOWA SESJE DO BAZY "INSERT INTO ".$prefix_table."_session (uname, time, host_addr, status) VALUES ('$username', '$nowtime', '$ip', '1')"
c) przegladajac tablice sesje mamy ilosc osob zalogowanych i nie zalogowanych
c) dla nie zalogowanych tez tworzymy sesje

CZY JEST TEN SKRYPT BEZPIECZNY ?
//********************************************************************************
******************************* //********************************************************************************
******************************* // +++++++++++++++++ function login ===================== LOGOWANIE +++++++++++++++++++++++++ //********************************************************************************
******************************* //********************************************************************************
******************************* function login($username, $user_password) { wyp_funk("TERAZ została wywolana fukcja:login(), moduł:User_Account:"); // nie mozna wypisywac gdy nie utworzy cookies wpier cokiees $sql = "SELECT user_password, user_id FROM ".$prefix_table."_users WHERE user_login='$username'"; wyp_sql($sql); // nie mozna wypisywac gdy nie utworzy cookies wpier cokiees // J found user: if ((mysql_num_rows($result)==1) AND ($dane_z_bazy[user_id] != 1) AND ($dane_z_bazy[user_password] != "")) { // user_id==1 to domyslne admin, nie moze być admin, hasło nie moze byc puste //Pobierz haslo usera z bazy $dane_z_bazy[user_password]; $dbpass=$dane_z_bazy[user_password]; // $user_password; haslo podane w argumencie $non_crypt_pass = $user_password; // haslo podane na stronie jest nie zakodowane //gg $old_crypt_pass = crypt($user_password,substr($dbpass,0,2)); // HASLO W BAZIE JEST NIE ZAKODOWANE if ($dbpass == $non_crypt_pass) { // jezeli haslo w bazie jest niezakodawane (damy sobie opcję wpisania hasla bezposrednio do bazy np. przez phpmyadmin) // uaktualnij haslo zakoduj md5, poniewaz nie bylo zakodowane $sql = "UPDATE ".$prefix_table."_users SET user_password='$md5_pass' WHERE user_login='$username'"; // dla pewnosci powtorz pobieranie hasla z bazy $sql = "SELECT user_password FROM ".$prefix_table."_users WHERE user_login='$username'"; // pobierz haslo z bazy, ktore juz jest zakodowane md5 $dbpass = $dane_z_bazy[user_password]; } // ---------- Tu mamy juz dwie zmienne $dbpass (haslo w bazie md5) oraz $md5_pass // $dbpass to haslo zakodowane md5 w bazie $md5_pass to haslo zakodowane md5 z panelu logowania if ($dbpass != $md5_pass) { w(red,3,"login istnieje w bazie ale haslo sie nie zgadza !!!!"); return; } // ---------------------- // OK haslo sie zgadza jedziemy dalej // Tworzymy ciasteczko // HASLO W BAZIE JEST ZAKODOWANE if ($dbpass == $md5_pass) // wlasciwie nie potrzebny warunek poniewaz powyzszy $dbpass != $md5_pass juz eliminuje dojsce TU !!! (a jezeli nie zadziala ?) { // ******** ************************************************************ // ******** ************* TU ZAPISZ NASZA ZMIENNA CIASTECZKO ********** // ******** ************************************************************ // ******** ************************************************************ docookie($dane_z_bazy[user_id], $username, $md5_pass); // ******** ************************************************************ // ******** ************************************************************ // usun stara sesje $ip_addres= $_SERVER["REMOTE_ADDR"]; $sql="DELETE FROM ".$prefix_table."_session WHERE uname='$uname' AND status='1'"; wyp_sql($sql); //Ustaw IP z ktorego sie zalogowal user dla bezpieczesntwa //Ustaw DATE DZIEN PRZEGLADARKE z jakiej sie loguje user dla bezpieczesntwa $sql = "UPDATE ".$prefix_table."_users SET last_ip='$ip_addres' WHERE user_login='$username'"; wyp_sql($sql); $ip = $_SERVER['REMOTE_ADDR']; $sql = "INSERT INTO ".$prefix_table."_session (uname, time, host_addr, status) VALUES ('$username', '$nowtime', '$ip', '1')"; wyp_sql($sql); } // Header("Location: modules.php"); } }