korey
20.08.2010, 14:36:44
Witam Od pewnej osoby zaraziłem się posesyjnym zabezpieczaniem strony. Mam system logowania oparty na trzech sessiach które zawierają login, haslo i range.
mam takie coś:
$log = md5($_SESSION['login']); $pass = md5($_SESSION['haslo']); $rang = md5($_SESSION['ranga']);
Czy takie rozwiązanie moze jakoś przeszkadzać w logowaniu..?
I czy w ogóle haslo warto trzymać w sessiach?
darophp
20.08.2010, 14:41:31
Raczej nie

A z tym hasłem w sesji to chyba nie bardzo.
lord2105
20.08.2010, 14:41:33
po co hasło trzymac w sesji trzymaj tylko ID
korey
20.08.2010, 14:41:57
Co raczej nie..? Moze napisałbyś coś więcej co i dlaczego..?
lord2105
20.08.2010, 14:53:14
zadaj sobie pytanie do czego będzie ci potrzebne hasło usera w sesji?
korey
20.08.2010, 14:57:23
No w sumie to zawsze używałem tego do Logowania usera.. to dm5() jakos poprawi bezpieczeństwo sessi.?
darophp
20.08.2010, 15:02:42
Cytat(korey @ 20.08.2010, 15:57:23 )

No w sumie to zawsze używałem tego do Logowania usera.. to dm5() jakos poprawi bezpieczeństwo sessi.?
Ale po co przechowywać to hasło w sesji ? Skoro potrzebne Ci jest tylko do logowania ? Nawet jeśli byłby panel do edycji własnych danych, to do tego nie potrzeba hasła z sesji, tylko wystarczy je sprawdzić z poprawnoscia tego w bazie, broń Boże w pliku. md5 to możesz używać do hashowania hasła + solić go
lord2105
20.08.2010, 15:03:40
nie zapisuj danych usera w sesji skoro masz je w np.bazie
takim prostym przykładem logowania może być to:
1. sprawdź w zapytaniu czy user wpisał prawidłowe pasy
2. jeśli tak ustaw sesje z jego ID może być kodowana za pomocą md5
3. Podczas logowania ustaw tablice sesyjna w której będziesz przesyłał sobie wszystkie potrzebna informacje na temat usera z bazy danych, oczywiście tablica ta nie powinna zawierać hasła jak sam zauważyłeś ono jest potrzebne tylko do logowania.
Dzięki temu zyskasz na mniejszej liczbie zmiennych sesyjnych.
Mam nadzieje, że zrozumiałeś, jeżeli pomogłem proszę o plusik:)
Pozdrawiam
thek
20.08.2010, 15:05:49
W sesji nie powinno się trzymać haseł, ewentualnie można w ostateczności jakiś hash tegoż, ale też nie polecam.
darophp
20.08.2010, 15:06:10
Cytat(lord2105 @ 20.08.2010, 16:03:40 )

Mam nadzieje, że zrozumiałeś, jeżeli pomogłem proszę o plusik:)
To po to jesteś na forum ?
korey
20.08.2010, 15:31:11
Zrobiłem tak:
^ Sprawdzamy wysłane dane z formularza w bazie.
^ Jeśli są poprawne, pobieramy z Bazy Id usera w/g podanych danych
^ Tworzymy sesje $_SESSION['status'] = 'zalogowany'; $_SESSION['id'] = $id; $_SESSION['login'] = $login;
teraz jesli sessia status != 'zalogowany'; to znaczy ze nie jesteśmy zalogowani.
Czy takie rozwiązanie jest wystarczająco bezpieczne i optymalne.?
lord2105
20.08.2010, 15:36:17
Jeśli w tabeli z userami nie masz nic wiecej oprócz hasła loginu i id to tak, ale jeśli nie to co wtedy jeślli będziesz chciał pobrać inne dane za każdym razem będziesz odpytywał bazę po to by wyciągnąć coś co bedzie Ci potrzebne?
Radzę podczas ustawiania $_SESSION['zalogowany'] ustawić też tablicę z wszytkim(prócz hasła) co mamy o danym userze w bazie danych i przesyłać ją w sesji, dzięki temu w każdym innym miejscu będziesz mógł wykorzystać dane o zalogowanym.
MacDada
20.08.2010, 19:00:02
$_SESSION to „zwykła” zmienna globalna dostępna tylko DLA SERWERA, stąd jeśli nie wyświetlisz wartości tej tablicy użytkownikowi, jest ona bezpieczna. Bez sensu jest więc haszowanie jej wartości.
W sesji przechowujesz jedynie ID użytkownika i za każdym razem kiedy odpalana jest strona odczytujesz wartość ID i ściągasz z bazy danych potrzebne dane. Jak to działa? W skrócie:
1.) Użytkownik wchodzi na stronę, serwer daje mu plik HTML i polecenie utworzenia ciasteczka z indywidualnym kodem.
2.) Użytkownik podaje swoje dane i klika przycisk logowania.
3.) Serwer odbiera dane logowania i automatycznie pobiera sobie od niego ciasteczko z indywidualnym kodem.
4.) Od tego momentu możesz wykorzystać tablicę $_SESSION której dane zależą od indywidualnego kodu. Dane te przechowywane są NA SERWERZE a nie w ciasteczku. Ciasteczko ma tylko kod, który pozwala serwerowi identyfikować użytkowników.
5.) Ja standardowo w zmiennej $_SESSION['zalogowany'] trzymam wartość 0. Jak ktoś się zaloguje to wstawiam tam jego ID.
6.) Więc użytkownik ponownie wchodzi na stronę, a ja na początku skryptu sprawdzam ID. Jeśli większe od 0, to wczytuję dane użytkownika z bazy o tym ID i wyświetlam odpowiednią treść. $_SESSION['zalogowany'] < 0 to wyświetlam treść dla niezalogowanych użytkowników.
korey
21.08.2010, 13:13:31
Hmm.. Bo nie wiem czy dobrze zrozumiałem. W ciasteczku id i login w sessi reszta danych. i teraz
if(ciasteczko_id > 0 && ciasteczko_login !='')
{
tresc dla zalogowanych
}
else
{
tresc dla nie zalogowanych
}
tylko w jaki sposób w jedną sessje zapakować reszte danych o wybranym userze.?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.