[php] Cookie i bezpieczeństwo.

0

Witam, pisze cmd w php, z logowaniem userów, i tak sie zastanawiam, czy jesli mam opcje autlogowania, ktora w cookie przetrzymuje ID użytkownika z bazy systemu. Oprócz niej nic więcej, jest to potem wykorzystywane przy automatycznym logowaniu. Jest możliwe zmienienie zawartości cookie, i przez to zalogowanie się jako inny user, próbowałem na IE, ale odrzucił mi plik cookie, nie wiem jak cała gama inncyh przeglądarek, jak się ma php do ręcznych zmian, i czy zostaje mi zostawianie także w cookie hasła usera[czy je szyfrować?] i potem porównywanie czy hasło jest dobre dla ID, i dopiero potem logowanie?

0

zalezy w czym rdytowales ten cookie, jesli w zwyklym notatniku to oczywiste ze IE go odrzucil.
Najlepiej procz ID zapisac cos jeszcze, ale nie koniecznie musi to byc haslo, wystarczy ze zapiszesz jaksa funkcje skrotu np: md5 czy CRC (albo wymyslec jakas swoja :) )
W tym momencie:

  • nawet jak ktos zmieni ID, to sie nie zaloguje.
  • jak ktos skopiuje kogos cookie, to nie bedzie wstanie odczytac jego hasla, bo to funkcja skotu, czyli funkcja jednostronna (przynajmniej z zalozenia, ale to sa skrajne przypadki, ktorymi sie tu nie bedziemy zajmowac :P)
0

Ja bym polecał takie rozwiązanie:
Masz bazę danych z aktualnie zalogowanymi userami. I tam masz ID usera i jakiś kod, który jest przy każdym logowaniu losowany i wysyłany w postaci cookie. I teraz jak ktoś zmieni ID usera w cookie, to nic nie zdziała, bo ten kod nie pozwoli mu się zalogować. Do tego zabezpieczysz się, że jak ktoś zostawi (przez przypadek) zalogowanego usera na publicznym komputerze, to wystarczy, że się zaloguje z innego i już z tamtego nie wejdzie (wykluczamy przypadek wylosowania akurat tego samego klucza). Ja tak mam u siebie zrobione i się całkiem sprawdza :].

0

Adam.Pilorz:
Calkiem nizly pomysl :>
A jak masz rozwiazane wylogowywanie?? Zerujesz losowy numerek?
A zreszta chyba nie musisz sie przejmowac ze wylosuje sie ten sam numerek, bo aby zostac zalogowanym to musisz miec

  1. losowy numer
  2. numer usera
    :D

[Pomysl lepszy od mojego :P]

0

Adam, hmm, ciekawe, i unikam zatrzymywania hasła w cookie, co i się bardzo podoba, powiedzcie mi jeszcze, czy przy rejestracji użytkownika kryptujecie hasło i dopiero wysyłacie je do bazy, przy każdym logowaniu szyfrując tak samo podane hasło i sprawdzając je w baziem, czy może zostawiacie hasło jak zwykły text w bazie?

0

Osobiście używam MD5. Unikam w ten sposób możliwości odczytania hasła przez kogoś, kto ma dostęp do bazy, wliczając w to siebie (użytkownicy nie muszą się powiedzmy bać ustawiać takiego samego hasła u mnie jak gdzie indziej - na podstawie MD5 hasła i tak niczego nie zdziałam).
//Dopisane: Wylogowywanie - usuwanie rekordu z bazy + czyszczenie cookie.

0

Tak jak powiedzieli poprzednicy - nie wystarczy samo ID usera lecz dodatkowo, unikalny klucz. Kluczem moze byc hashowana wersja hasla.

Przykladowo: w bazie danych trzymasz ID, login oraz haslo haszowane - zalozmy - algorytmem DES. Teraz przy logowaniu zapisujesz ID oraz klucz:

$cookie_ary = array('ID' => $user_id, 'key' => md5($password));
setcookie('ciastko', serialize($cookie_ary));

Czyli: haslo mimo za haszowane DES-em (funkcja crypt), jest dodatkowo haszowane MD5 i w takiej postaci zapisywane do ciastka.

Pozniej, przy odczycie:

$cookie_ary = unserialize(stripslashes(strip_tags($_COOKIE['ciastko'])));
$user_id = (int)$cookie_ary['ID']; // SQL Injection

Na podstawie $user_id pobierasz z bazy haslo usera, a nastepnie szyfrujesz je MD5, porownujac nastepnie z wersja z $cookie_ary['key']. Jezeli sie zgadza - uzytkownik jest rozpoznany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1