Wpis z mikrobloga

#php #mysql #programowanie

Zastanawiam się jak najlepiej rozwiązać logowanie i sesje oraz ich zabezpieczenie. Na początku wykonałem to tak, że przy prawidłowym zalogowaniu, w zmiennej sesyjnej przechowywałem id użytkownika z bazy i wszelkie dalsze operacje bazodanowe wykonywałem na podstawie tego id. Jeśli ta zmienna jest pusta, nie ma dostępu do stron przeznaczonych dla zalogowanych. Później poczytałem więcej i wiem jaka to głupota i właśnie dlatego chcę to zrobić jakoś inaczej i od razu pozabezpieczać. Jakieś propozycje? :)
  • 15
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@wheezy123: Ja mam to w podobny sposób zaimplementowane i nie narzekam na brak bezpieczeństwa. :)

http://scr.hu/0rs/69ywv - tabela z sesjami. ID sesji zapisane w ciastku.

Przy ładowaniu sesji sprawdzam mogę sprawdzać ID sesji + np. przeglądarkę / adres IP.

Żeby to złamać ktoś musiałby znać dokładnie sposób w jaki to sprawdzasz. :)
  • Odpowiedz
@max1m0-: Pozwól, że przeanalizuję Twój przypadek, bo pierwszy raz to robię. Użytkownik się loguje:

- jeśli hasło się zgadza to do db zapisujesz ip użytkownika, przeglądarkę, id sesji oraz czas tego zdarzenia. Pobierasz z bazy sid przed chwilą zapisanej sesji i zapisujesz do ciastka

- użytkownik przechodzi na kolejną stronę odczytujesz sid z ciastka, pobierasz dane na jego podstawie z bazy i porównujesz z obecnym nadesłanym
  • Odpowiedz
@h3lloya:

sid - to unikalny autoincrement w bazie danych.

- użytkownik przechodzi na kolejną stronę odczytujesz sid z ciastka, pobierasz dane na jego podstawie z bazy i porównujesz z obecnym nadesłanym
  • Odpowiedz
@max1m0-: A sessionid nie jest przypadkiem generowany na podstawie czasu serwera (i to razem z mikrosekundami) plus jakaś random liczba? Bo jeśli tak by było to prawdopodobieństwo wystąpienia tego samego sessionid jest tak niewielkie, że można by zaoszczędzić tego dodatkowego zapytania do bazy szczególnie, że porównujemy jeszcze ip, przeglądarkę itd.
  • Odpowiedz